မျက်မှောက်ခေတ် web application များတွင်ဖြန့်ဝေထားသောဗိသုကာလက်ရာသည်စနစ်ရရှိနိုင်မှုနှင့်ပမာဏကိုတိုးတက်စေရန်အဓိကနည်းလမ်းဖြစ်လာသည်။ သို့သော်ဖြန့်ဝေထားသောပတ် 0 န်းကျင်များကြောင့်ဖြစ်ပေါ်လာသောစိန်ခေါ်မှုတစ်ခုမှာဖြစ်သည်။ ဖြန့်ဝေထားသော node များအကြား cache state သည်စနစ်တကျစီမံခြင်းမပြုနိုင်ပါကအချက်အလက်မကိုက်ညီသောအချက်အလက်များသည်အမှားအယွင်းများ,
ဖြန့်ဖြူးထားသောစနစ်တွင်ထိရောက်သောနှင့်တသမတ်တည်းသိုလှောင်ရုံယန္တရားကိုအကောင်အထည်ဖော်ရန် PHPCu_entry function ကိုမည်သို့အသုံးပြုရမည်ကိုဤဆောင်းပါးကမိတ်ဆက်ပေးလိမ့်မည်။
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 ကို သုံး. node များ (L1 Cache) အတွက်ပထမအဆင့် cache ကို သုံး. cache layer (l2 cache) အဖြစ် redis ကိုသုံးနိုင်သည်။
Node တစ်ခုစီသည်ဒေသတွင်း Apcu မှအချက်အလက်များကိုပြန်လည်ရယူရန်ကြိုးပမ်းမှုကို ဦး စားပေးသည်။
APCU မထိပါကအချက်အလက်မျိုးဆက်ဆိုင်ရာယုတ္တိဗေဒကိုတစ်ကြိမ်သာဟုခေါ်သည်ကိုသေချာစေရန် apcu_entry ကို သုံးပါ။
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 ဖြန့်ဖြူးထားသောစနစ်ကိုတည်ဆောက်ရန်အရေးကြီးသောနည်းလမ်းတစ်ခုဖြစ်သည်။