လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ဖြန့်ဖြူးထားသောပတ်ဝန်းကျင်တွင် apcu_entry ကို အသုံးပြု. Cache ထပ်တူပြုခြင်းကိုမည်သို့အကောင်အထည်ဖော်ရမည်နည်း

ဖြန့်ဖြူးထားသောပတ်ဝန်းကျင်တွင် apcu_entry ကို အသုံးပြု. Cache ထပ်တူပြုခြင်းကိုမည်သို့အကောင်အထည်ဖော်ရမည်နည်း

gitbox 2025-05-26

မျက်မှောက်ခေတ် web application များတွင်ဖြန့်ဝေထားသောဗိသုကာလက်ရာသည်စနစ်ရရှိနိုင်မှုနှင့်ပမာဏကိုတိုးတက်စေရန်အဓိကနည်းလမ်းဖြစ်လာသည်။ သို့သော်ဖြန့်ဝေထားသောပတ် 0 န်းကျင်များကြောင့်ဖြစ်ပေါ်လာသောစိန်ခေါ်မှုတစ်ခုမှာဖြစ်သည်။ ဖြန့်ဝေထားသော node များအကြား cache state သည်စနစ်တကျစီမံခြင်းမပြုနိုင်ပါကအချက်အလက်မကိုက်ညီသောအချက်အလက်များသည်အမှားအယွင်းများ,

ဖြန့်ဖြူးထားသောစနစ်တွင်ထိရောက်သောနှင့်တသမတ်တည်းသိုလှောင်ရုံယန္တရားကိုအကောင်အထည်ဖော်ရန် PHPCu_entry function ကိုမည်သို့အသုံးပြုရမည်ကိုဤဆောင်းပါးကမိတ်ဆက်ပေးလိမ့်မည်။

apcu_entry ဆိုတာဘာလဲ။

apcu_entry သည် PHP APCU တိုးချဲ့မှုသည်အဏုမြူတန်ဖိုးများကိုအသုံးပြုပြီးဖန်တီးရန်သို့မဟုတ်ထုတ်လုပ်ရန်နှင့် cache ကိုထုတ်လုပ်ရန်နှင့် cache ကိုထုတ်လုပ်ရန်အတွက်ထောက်ပံ့ပေးသောအဆင်ပြေသောလုပ်ဆောင်ချက်ဖြစ်သည်။ function ကိုလက်မှတ်သည်အောက်ပါအတိုင်းဖြစ်သည် -

 mixed apcu_entry(string $key, callable $generator, int $ttl = 0)
  • $ key : cache key name ။

  • $ Generator - cache item ကို cache item မတည်ရှိပါက, cache တန်ဖိုးများကိုထုတ်လုပ်ရန်အသုံးပြုသော function ကိုခေါ်။

  • $ ttl : စက္ကန့်ပိုင်းအတွင်း, cache အချိန်။ 0 ဆိုလိုသည်သက်တမ်းကုန်ဆုံးဆိုလိုသည်။

ဤလုပ်ဆောင်ချက်တွင်ချည်ထားသောလက္ခဏာများရှိပြီး cache တန်ဖိုးကိုတစ်ချိန်ကသာထုတ်လုပ်နိုင်ရန်အတွက် "တုန်လှုပ်စေသော" အကျိုးသက်ရောက်မှုများကိုရှောင်ရှားနိုင်ပြီး "ထိတ်လန့်တုန်လှုပ်ဖွယ်ကောင်းသော" အကျိုးသက်ရောက်မှုကိုရှောင်ရှားနိုင်သည်။

ဖြန့်ဝေသောပတ်ဝန်းကျင်တွင်ပြနာများ

ပုံမှန်အားဖြင့် APCU သည်ဒေသခံမှတ်ဉာဏ်အပေါ်အခြေခံသည်။ ဆာဗာများကို ဖြတ်. မျှဝေခြင်းမရှိပါ။ ထို့ကြောင့် PHP-FPM node များအကြား node တစ်ခုစီ၏ apcu အထီးကျန်ဖြစ်ပါတယ်။

ဥပမာအားဖြင့်:

  • ဆာဗာတစ်ခုက cache key user_123_profile ကို တောင်းဆိုခြင်းနှင့်မျိုးဆက်ယုတ္တိဗေဒကိုကွပ်မျက်လိမ့်မည်။

  • ဆာဗာခသည်ဤသော့ကိုထပ်မံတောင်းဆိုရန်နှင့် APCU သည် cache ကိုမထိမိသောကြောင့်၎င်းသည်ဒေသဆိုင်ရာမှတ်ဉာဏ်တွင်သာတည်ရှိသည်။

ဤကိစ္စတွင် Node မျိုးစုံသည်တစ်ချိန်တည်းတွင်ဒေတာများကိုဆွဲထုတ်ရန်နှင့်ဒေသတွင်း Apcu cache သို့ရေးရန်ကြိုးစားပါက၎င်းသည်ဒေသတွင်း Apcu cache သို့ရေးရန်ကြိုးစားပါက,

ဖြေရှင်းချက် - ပြည်တွင်း Apcu + မျှဝေထားသောသိုလှောင်မှု (ဥပမာ - redis)

APCU နှင့် Redis ကို သုံး. apcu ကို သုံး. node များ (L1 Cache) အတွက်ပထမအဆင့် cache ကို သုံး. cache layer (l2 cache) အဖြစ် redis ကိုသုံးနိုင်သည်။

အောက်ပါအတိုင်းအဆင့်များမှာ -

  1. Node တစ်ခုစီသည်ဒေသတွင်း Apcu မှအချက်အလက်များကိုပြန်လည်ရယူရန်ကြိုးပမ်းမှုကို ဦး စားပေးသည်။

  2. APCU မထိပါကအချက်အလက်မျိုးဆက်ဆိုင်ရာယုတ္တိဗေဒကိုတစ်ကြိမ်သာဟုခေါ်သည်ကိုသေချာစေရန် apcu_entry ကို သုံးပါ။

  3. apcu_entry ၏မျိုးဆက်ယုတ္တိဗေဒ၌:

    • ပထမ ဦး ဆုံးREDIစ်သည်ဒေတာရှိပြီးသားရှိမရှိစစ်ဆေးပါ။

    • Redis hits, redis မှဝန်နှင့် apcu မှသိမ်းပါ။

    • Redis သည်လွဲချော်နေပါက၎င်းကိုဒေတာဘေ့စ်သို့မဟုတ်အခြားအရင်းအမြစ်မှရယူပြီး၎င်းကို Redis နှင့် APCU သို့သိမ်းဆည်းပါ။

နမူနာကုဒ်:

 function getUserProfile($userId) {
    $cacheKey = "user_profile_$userId";

    return apcu_entry($cacheKey, function() use ($cacheKey, $userId) {
        // Redis ဖြန့်ဝေ cache အဖြစ်
        $redis = new Redis();
        $redis->connect('gitbox.net', 6379);

        $redisKey = "global_cache:$cacheKey";
        $cached = $redis->get($redisKey);

        if ($cached !== false) {
            return json_decode($cached, true);
        }

        // ဒေတာဘေ့စတစ်ခုမှတင်ထားသောအချက်အလက်များကိုတေးဂီတကိုတုပပါ
        $profileData = loadUserProfileFromDB($userId);

        // ကယ်ဆယ် Redis(သက်တမ်းကုန်ဆုံးချိန်သတ်မှတ်ထားပါ,ဥပမာအားဖြင့်10မိနစ်)
        $redis->setex($redisKey, 600, json_encode($profileData));

        return $profileData;
    }, 60); // APCu သိုကာတာ60စက်ဏန့်
}

အထက်ဖော်ပြပါနည်းလမ်းဖြင့် apcu_entry မှတစ်ဆင့် node တစ်ခုချင်းစီသည်ပထမတောင်းဆိုမှုကိုပြုလုပ်သောအခါတစ်ကြိမ်တည်းသောအချက်အလက်များကိုတစ်ကြိမ်သာရိုက်ထည့်ပြီးဒေတာဘေ့စ်ကိုထပ်ခါတလဲလဲမေးမြန်းခြင်းကိုရှောင်ရှားလိမ့်မည်ဟုသေချာစေသည်။ Redis ၏တည်ရှိမှုမှာ node များအပေါ် cache ကိုက်ညီမှုရှိစေသည်။

ရှေ့နောက်ညီညွတ်ရေးအာမခံနှင့်သက်တမ်းကုန်ဆုံးနည်းဗျူဟာများ

ဒေတာရှေ့နောက်ညီညွတ်မှုကိုတိုးတက်စေရန်အောက်ပါနည်းဗျူဟာများကိုလက်ခံနိုင်သည်။

  • စည်းလုံးသက်တမ်းကုန်ဆုံးမည့်အချိန် - Redis နှင့် APCU ၏ TTL ၏ TTL သည်အတော်လေးတသမတ်တည်းနှင့် "ညစ်ပတ်သောစာဖတ်ခြင်း" ကိုရှောင်ကြဉ်ကြောင်းသေချာစေပါ။

  • ဒေတာများကိုထိန်းချုပ်ရန်ဗားရှင်းနံပါတ်ကိုသုံးပါ ။ ဗားရှင်းနံပါတ်သို့မဟုတ် timestamp ကို cache data ကိုဖတ်ရှုသောအခါနောက်ဆုံးပေါ်ဖြစ်ကြောင်းအတည်ပြုရန်ထည့်ပါ။

  • Active DAIBREIDIGNIGNIGNIGNATION : ဥပမာအသုံးပြုသူအချက်အလက်များကိုမွမ်းမံပြီးပါက node များအားလုံးကိုသက်ဆိုင်ရာ APCU Cache (Redis Proven / Subscribe မှအကောင်အထည်ဖော်နိုင်သည်) ကိုရှင်းလင်းရန်အကြောင်းကြားထားသည်။

အကျဉ်းချုပ်

APCU သည်ဖြန့်ဝေထားသောပတ် 0 န်းကျင်တွင်အချက်အလက်များကိုတိုက်ရိုက်မျှဝေခြင်းမပြုနိုင်သော်လည်း apcu_entry ၏ချည်မျှင်၏ယန္တရားမှတစ်ဆင့်ကျွန်ုပ်တို့သည်ထိရောက်သော Cache စနစ်ကိုတည်ဆောက်နိုင်သည်။ Redis ကဲ့သို့သောမျှဝေထားသော cacheing tools များနှင့်ပေါင်းစပ်ပြီးဒေတာဘေ့စ်ကို 0 န်ဆောင်မှုကိုထိထိရောက်ရောက်လျှော့ချနိုင်သည်။

ဤပုံစံသည်သုံးစွဲသူသတင်းအချက်အလက်, ပြင်ဆင်ခြင်းအချက်အလက်များ, ထုတ်ကုန်အသေးစိတ်အချက်အလက်များစသည့်စီးပွားရေးအခြေအနေများအတွက်အထူးသဖြင့်သင့်တော်သည်။ ၎င်းသည်စွမ်းဆောင်ရည်မြင့်မားသော PHP ဖြန့်ဖြူးထားသောစနစ်ကိုတည်ဆောက်ရန်အရေးကြီးသောနည်းလမ်းတစ်ခုဖြစ်သည်။