PHP Development အလေ့အကျင့်တွင် APCU တိုးချဲ့မှုများကိုတောင်းဆိုမှုများအကြားအချက်အလက်များကိုမျှဝေရန်အသုံးပြုသည်။ သို့သော် PHP ၏မျှဝေထားသောမှတ်ဉာဏ်ယန္တရားသည်၎င်း၏စံပြပုံစံ (အထူးသဖြင့် FPM သို့မဟုတ် Apache) ဖြင့်အကန့်အသတ်ရှိသောကြောင့် developer များမကြာခဏနားလည်မှုလွဲမှားစွာ "project provision cache" ကိုနားလည်မှုလွဲလေ့ရှိသည်။ ဤဆောင်းပါးသည် apcu_entry function မှတစ်ဆင့်ပုံမှန် Multi-process program တစ်ခုတွင် APCU Cache ကိုမျှဝေသုံးစွဲမှုကိုမည်သို့အကောင်အထည်ဖော်ရမည်ကိုလေ့လာလိမ့်မည်။
APCU (အခြားရွေးချယ်စရာ PHP Cache သုံးစွဲသူ) သည် PHP ၏အသုံးပြုသူ၏ cache module ဖြစ်သည်။ CLI MODE နှင့် Web Mode အတွက်သင့်တော်သည်။ သို့သော် Multi-process model အောက်တွင် variable ကိုနေရာအောက်တွင် PHCU ဝေမျှခြင်းသည်မှတ်ဉာဏ်မြေပုံပေါ်တွင်မူတည်သည် ။
ဆိုလိုသည်မှာ PHP သည် APCU Memory area ရိယာတစ်ခုတည်းကိုအသုံးပြုနေသမျှကာလပတ်လုံးဖြစ်စဉ်များသည်ဤမျှဝေထားသောမှတ်ဉာဏ်တွင်ဖြစ်စဉ်များအားလုံးတွင်သိမ်းဆည်းထားသောအချက်အလက်များကိုရယူနိုင်သည်။ variable scope အထီးကျန်ဖြစ်ပေမယ့် cache မဟုတ်ပါဘူး။
apcu_entry သည် cache ပစ္စည်းများရရှိရန်သို့မဟုတ်ထုတ်လုပ်ရန် PHP 5.5+ တွင်မိတ်ဆက်ပေးသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်း၏ပုံမှန်အသုံးပြုမှုမှာအောက်ပါအတိုင်းဖြစ်သည် -
$value = apcu_entry('cache_key', function() {
return some_expensive_function();
});
၎င်း၏အလုပ်လုပ်နိယာမမှာ:
cache_key တည်ရှိမလားစစ်ဆေးပါ။
တည်ရှိပါကတိုက်ရိုက်ပြန်လာပါ။
အကယ်. ၎င်းသည်မရှိပါကလုပ်ငန်းကိုပိတ်ပစ်တွင်လုပ်ဆောင်ပါ,
ဤ "Lazy Computing + cache" မဟာဗျူဟာသည်လုပ်ငန်းစဉ်များစွာတွင်အရင်းအမြစ်မျှဝေခြင်းလိုအပ်ချက်များအတွက်အလွန်သင့်လျော်သည်။
PHP ၏ PCNTL_FORK ကို ဥပမာတစ်ခုအဖြစ်ယူပြီး cache ကိုမျှဝေမလားဆိုတာကိုအတည်ပြုဖို့ Multi-Process ဇာတ်လမ်းတစ်ပုဒ်ကိုတုူတယ်။
<?php
if (!extension_loaded('apcu')) {
die("APCu extension ကိုဖွင့်မရပါ\n");
}
apcu_clear_cache();
$pid = pcntl_fork();
if ($pid == -1) {
die("ကလေးဖြစ်စဉ်ကို ဖန်တီး. မရပါ\n");
} elseif ($pid === 0) {
// လက်အောက်ခံ
$data = apcu_entry('shared_key', function () {
echo "လက်အောက်ခံ:cache ကိုလွဲချော်,ဒေတာထုတ်လုပ်ရန်\n";
return 'လက်အောက်ခံ写入的数据 ' . time();
});
echo "လက်အောက်ခံ读取缓存:$data\n";
} else {
// မိဘလုပ်ငန်းစဉ်
sleep(1); // 等待လက်အောက်ခံ先执行
$data = apcu_entry('shared_key', function () {
echo "မိဘလုပ်ငန်းစဉ်:cache ကိုလွဲချော်,ဒေတာထုတ်လုပ်ရန်\n";
return 'မိဘလုပ်ငန်းစဉ်写入的数据 ' . time();
});
echo "မိဘလုပ်ငန်းစဉ်读取缓存:$data\n";
}
များသောအားဖြင့်သင်မြင်ရလိမ့်မည် -
လက်အောက်ခံ:cache ကိုလွဲချော်,ဒေတာထုတ်လုပ်ရန်
လက်အောက်ခံ读取缓存:လက်အောက်ခံ写入的数据 1715600000
မိဘလုပ်ငန်းစဉ်读取缓存:လက်အောက်ခံ写入的数据 1715600000
ဤအချက်က APCU ၏သိမ်းဆည်းထားသောအကြောင်းအရာသည်မိဘနှင့်ကလေးဖြစ်စဉ်များအကြားအမှန်ပင်မျှဝေကြောင်းဖော်ပြသည်။
PHP သည်တူညီသော SAPI ကိုအသုံးပြုနေသည်ကိုသေချာအောင် (ဥပမာ - CLI mode တွင်ကလေးဖြစ်စဉ်များကိုအသုံးပြုသည်) ,
PHP.ini တွင် APC.enable_Cli = 1 ကိုဖွင့်ထားကြောင်းအတည်ပြုပါ ။
Apcu သည်ဆာဗာ cache မျှဝေခြင်းအတွက်မသင့်တော်ပါ။ သင် Multi-Machine Cache လိုအပ်ပါက ကျေးဇူးပြု. ပြန်လည်ထူထောင်ရေးနှင့်အခြား 0 န်ဆောင်မှုများကိုသုံးပါ။
Cache Persistence ကိုကျော်လွှားခြင်းကိုရှောင်ရှားပါ။
ကျွန်ုပ်တို့သည် Remote API မှ configuration data များကိုရယူသည်ဆိုပါစို့။
$config = apcu_entry('remote_config', function () {
echo "Remote Interface မှအချက်အလက်များကိုရယူပါ...\n";
$json = file_get_contents('https://gitbox.net/api/config');
return json_decode($json, true);
});
cache သက်တမ်းကုန်သွားသရွေ့ဤယုတ္တိဗေဒကိုမခေါ်ပါနှင့် interface ကိုထပ်တလဲလဲတောင်းဆိုလိမ့်မည်။ ၎င်းသည်စွမ်းဆောင်ရည်ကိုအလွန်တိုးတက်ကောင်းမွန်စေပြီးဝေးလံခေါင်သီသောဖုန်းခေါ်ဆိုမှုအရေအတွက်ကိုလျော့နည်းစေသည်။
apcu_entry သည် လှပသော cacheting ယန္တရားကိုထောက်ပံ့ပေးသည်။ Multi-process PHP အစီအစဉ်တွင် APCU ၏သိုလှောင်ထားသည့်အကြောင်းအရာများကိုလည်ပတ်နေသောပတ် 0 န်းကျင်ကိုခွင့်ပြုသရွေ့လုပ်ငန်းစဉ်များတွင်မျှဝေနိုင်သည်။ ၎င်း၏လည်ပတ်မှုမူများနှင့်ကန့်သတ်ချက်များကိုနားလည်ခြင်းသည်သင့်အားစွမ်းဆောင်ရည်မြင့်မားသော PHP application များကိုပိုမိုထိရောက်စွာတည်ဆောက်ရန်ကူညီလိမ့်မည်။