ဒေတာပြိုင်ဆိုင်မှုသည်တစ်ချိန်တည်းတွင်မျှဝေထားသောဒေတာများကိုကြည့်ရှုခြင်းလုပ်ငန်းစဉ်များသို့မဟုတ်ချည်များကိုရည်ညွှန်းသည်။ PHP တွင်အထူးသဖြင့် APC cache ကိုအသုံးပြုသောအခါ Cache သည်များသောအားဖြင့်သာမန်အားဖြင့်မျှဝေခြင်းသည်တစ်ချိန်တည်းတွင်တူညီသော cache key ကိုတူညီစွာရေးသားပါကဒေတာပြိုင်ပွဲပြ issues နာများပေါ်ပေါက်လာနိုင်သည်။
apcu_entry function ၏ function သည် cache ထဲတွင်သတ်မှတ်ထားသောသော့ချက်တန်ဖိုးအတွဲများရှိမရှိမရှိစစ်ဆေးရန်ဖြစ်သည်။ မရရှိလျှင်၎င်းသည်ဒေတာများကိုထုတ်လုပ်ရန်နှင့် cache ထဲတွင်သိမ်းဆည်းရန် callback function ကိုလုပ်ဆောင်သည်။ ပုံမှန်အခြေအနေများအရ Cache ပျက်ကွက်မှု၏မိတ္တူပွားခြင်းပြ problem နာကိုထိရောက်စွာရှောင်ရှားနိုင်သော်လည်းတစ်ပြိုင်နက်တည်းကအခြေအနေမျိုးတွင်တူညီသော cache key တွင်လည်ပတ်နေပါကအောက်ပါပြ problems နာများဖြစ်ပေါ်နိုင်သည်။
ထပ်ခါတလဲလဲတွက်ချက်မှု - တောင်းဆိုမှုများစွာသည်တစ်ပြိုင်နက်တည်းရှိသည့်အခါ cache သည်မထိသော်လည်း, တောင်းဆိုမှုများသည်တစ်ချိန်တည်းတွင် callback function ကိုထည့်သွင်းပြီးတူညီသောရလဒ်ကိုထပ်ခါတလဲလဲတွက်ချက်နိုင်သည်။
မကိုက်ညီပါ ။ cache cache လုပ်ဆောင်မှုများကို cache function များဖြင့်ပြုလုပ်သောကြောင့်တစ်ပြိုင်နက်တည်းလုပ်ဆောင်မှုများသည်ဒေတာ overwrite သို့မဟုတ်ရှေ့နောက်မညီမှုများဖြစ်ပေါ်စေနိုင်သည်။
ဒေတာပြိုင်ဆိုင်မှုပြ problem နာကိုဖြေရှင်းရန် apcu_entry အသုံးပြုခြင်းကိုအောက်ပါနည်းလမ်းများဖြင့်အကောင်းဆုံးနည်းလမ်းများဖြင့်အကောင်းဆုံးနည်းလမ်းများဖြင့်အကောင်းဆုံးနည်းလမ်းများဖြင့်အကောင်းဆုံးနည်းလမ်းများဖြင့်အကောင်းဆုံးနည်းလမ်းများဖြင့်အကောင်းဆုံးနည်းလမ်းများဖြင့်အသုံးပြုနိုင်သည်။
အသုံးအများဆုံးနည်းလမ်းမှာတစ်ချိန်တည်းတွင်ပင် cache ရေးသားခြင်းကိုသာပြုလုပ်နိုင်ရန်သေချာစေရန်သော့ခတ်ယန္တရားကိုအသုံးပြုရန်ဖြစ်သည်။ PHP တွင်သော့ခလောက်များ, Redis, MATCACCACKED, စသည်တို့ကိုသင်အသုံးပြုနိုင်သည်။ ဤတွင်ဖိုင်သော့ခလောက်များကို အသုံးပြု. ရိုးရှင်းသောအကောင်အထည်ဖော်မှုဖြစ်သည်။
$cache_key = 'my_cache_key';
$lock_key = $cache_key . '_lock';
if (apcu_exists($lock_key)) {
// သော့ခတ်ပြီးသားတည်ရှိလျှင်,ခဏစောင့်ပါနှင့်ထပ်ကြိုးစားပါ
sleep(1);
} else {
// သော့ခတ်ထည့်ပါ
apcu_store($lock_key, true, 10); // သော့ခတ်သက်တမ်းကုန်ဆုံးချိန်ဖြစ်ပါတယ်10စက်ဏန့်
// cacheed တန်ဖိုးများကိုထုတ်လုပ်ပါ
$value = generate_cache_value();
// သိုလှောင်ထားသောတန်ဖိုးများကိုသိုလှောင်ပါ
apcu_store($cache_key, $value);
// သော့ခတ်ကိုလွှတ်လိုက်ပါ
apcu_delete($lock_key);
}
သော့ခလောက်များကိုအသုံးပြုခြင်းအားဖြင့်တစ်ချိန်တည်းမှာပင်လုပ်ငန်းစဉ်တစ်ခုသာလျှင် cache bene-generate callback logic ထဲသို့ 0 င်ရောက်နိုင်ရန်သေချာစေနိုင်သည်။
apcu_add function သည် apcu_entry function နှင့်ဆင်တူသော်လည်း၎င်းသည်ရှိပြီးသား cache တန်ဖိုးများကို overwlet လုပ်ခြင်းကိုရှောင်ရှားသည်။ ဒါကြောင့်သင် cache key ကိုသေချာအောင်လုပ်ဖို့လိုအပ်တဲ့အချိန်မှာဒေတာပြိုင်ဆိုင်မှုရဲ့အခွင့်အလမ်းကိုလျှော့ချဖို့ apcu_add ကို သုံးနိုင်တယ်။
$value = apcu_add('my_cache_key', generate_cache_value(), 3600);
အကယ်. cache သော့ရှိပြီးသားဖြစ်ပါက apcu_add သည် ၎င်းကိုထပ်ခါတလဲလဲရေးထားမည်မဟုတ်ပါ။
နောက်ထပ်ရိုးရှင်းသောနည်းလမ်းမှာ calmback function ကိုမ 0 င်ခင် cache သည် cache ရှိပြီးသားတည်ရှိပြီးဖြစ်သည်။ တောင်းဆိုမှုများကိုတစ်ပြိုင်နက်တည်းလုပ်ဆောင်သောအခါထပ်ခါတလဲလဲတွက်ချက်မှုများကိုရှောင်ပါ။ cache ကိုတွက်ချက်ခြင်းရှိမရှိကိုမှတ်တမ်းတင်ရန်သီးခြားအလံကိုသုံးနိုင်သည်။ ဥပမာအားဖြင့်:
$cache_key = 'my_cache_key';
if ($result = apcu_fetch($cache_key)) {
// cache ကိုနှိပ်ပါ,တိုက်ရိုက်အသုံးပြုပါ
} else {
// cache ကိုလွဲချော်,တွက်ချက်မှုအခြေအနေကိုစစ်ဆေးပါ
$status_key = $cache_key . '_status';
if (!apcu_exists($status_key)) {
// အဘယ်သူမျှမနိမိတ်လက်ခဏာကိုတွက်ချက်လျက်ရှိသည်,တွက်ချက်အဖြစ်မှတ်သား
apcu_store($status_key, true);
// cache တန်ဖိုးရှိမျိုးဆက်စစ်ဆင်ရေးလုပ်ဆောင်ပါ
$result = generate_cache_value();
// သိုလှောင်ရုံသိုလှောင်ရုံ
apcu_store($cache_key, $result);
// တွက်ချက်မှုအဆင့်အတန်းအလံဖယ်ရှားပါ
apcu_delete($status_key);
} else {
// Cache စစ်ဆင်ရေးကိုဖြည့်စွက်ရန်အခြားတောင်းဆိုမှုများကိုစောင့်ပါ
while (!$result = apcu_fetch($cache_key)) {
sleep(1);
}
}
}
ဤနည်းအားဖြင့်တောင်းဆိုမှုများစွာသည်တစ်ချိန်တည်းတွင်တူညီသော cache key တစ်ခုတည်းတွင်လည်ပတ်သောအခါပထမ ဦး ဆုံးတောင်းဆိုချက်သည် cache ကိုထုတ်လုပ်လိမ့်မည်။ ကျန်ရှိသောတောင်းဆိုမှုများသည် cache proc ကိုပြီးစီးရန်စောင့်ဆိုင်းလိမ့်မည်။
သင်၏သိုလှောင်ထားသည့်အချက်အလက်များသည်အလွန်အရေးကြီးပြီးရှေ့နောက်ညီညွတ်မှုအတွက်လိုအပ်ချက်များကိုမြင့်မားစွာထားရှိပါက, APC သည်အရောင်းအ 0 ယ်များကိုတိုက်ရိုက်ပံ့ပိုးခြင်းမရှိသော်လည်းအလားတူအကျိုးသက်ရောက်မှုများရရှိရန်ဒေတာဘေ့စ်အရောင်းအ 0 ယ်များသို့မဟုတ်ပြင်ပ cache များကိုသုံးနိုင်သည်။