Database Query Performance သည်စွမ်းဆောင်ရည်မြင့်မားသော PHP applications များကိုတီထွင်သောအခါဘုံစိန်ခေါ်မှုတစ်ခုဖြစ်သည်။ အထူးသဖြင့်တူညီသောအချက်အလက်အမြောက်အများကိုပြုပြင်သည့်အခါတူညီသောစုံစမ်းမှုကိုထပ်ခါတလဲလဲလုပ်ဆောင်ခြင်းသည်လျှောက်လွှာတုန့်ပြန်အချိန်ကိုအလွန်နှေးကွေးစေနိုင်သည်။ ဤအချိန်တွင် Cached Query ရလဒ်များသည်ထိရောက်သော optimization နည်းလမ်းဖြစ်လာသည်။ MySQLI_result query query query query ကို redis (သို့) ဖိုင်စနစ်အားသိုလှောင်ခြင်းဖြင့် PHP application စွမ်းဆောင်ရည်ကိုမည်သို့ကောင်းမွန်အောင်ပြုလုပ်ရမည်ကိုဤဆောင်းပါးတွင်လေ့လာပါမည်။
လျှောက်လွှာသည်ဒေတာဘေ့စ်စုံစမ်းမှုတစ်ခုကိုပြုလုပ်သောအခါတိုင်းဒေတာဘေ့စ်အင်ဂျင်သည် hard disk မှအချက်အလက်များကိုဖတ်ပြီး query query ရလဒ်များကိုဖတ်လိမ့်မည်။ အကယ်. ဤမေးမြန်းချက်များသည်ပုံတူပွားခြင်းနှင့်ဒေတာများသည်မကြာခဏပြောင်းလဲသွားပါကဒေတာဘေ့စ်မှတူညီသောအချက်အလက်များကိုအချိန်တိုင်းဖတ်ရန်မလိုပါ။ Cache နည်းပညာသည်စုံစမ်းမှုရလဒ်များကိုမှတ်ဉာဏ် (ဥပမာ redis) ကိုမှတ်ဉာဏ်ရလဒ်များသိုလှောင်ထားနိုင်သည်သို့မဟုတ်၎င်းတို့အားဒေသန္တရဖိုင်စနစ်တွင်သိုလှောင်ထားနိုင်သည်။
Redis သည် open source in-memory data storage system ဖြစ်ပြီးအချက်အလက်များကိုလေ့ကျင့်ထားသောအချက်အလက်များကိုသိုလှောင်ထားသည့်အချက်အလက်များကိုသိုလှောင်ရန်အထူးသဖြင့်အသုံးပြုသည်။ အောက်ဖော်ပြပါ MySQLI_RESult Query Query RETIS သို့ RETIS သို့ cache လုပ်ရန်အခြေခံအဆင့်များဖြစ်သည်။
ပထမ ဦး စွာဆာဗာတွင် Redis 0 န်ဆောင်မှုကိုတပ်ဆင်ရန်လိုအပ်သည်။ installation နည်းလမ်းသည်သင်၏ operating system ပေါ်တွင်မူတည်သည်။ အသေးစိတ်တပ်ဆင်ခြင်းအဆင့်များအတွက် M66.Net/redis -installation ကိုသင်ရည်ညွှန်းနိုင်သည်။
PHP တွင် Redis ကိုအသုံးပြုရန် PHP အတွက် Redis extension ကို install လုပ်ရန်လိုအပ်သည်။ ၎င်းကိုအောက်ပါ command မှတဆင့် install လုပ်နိုင်သည်။
sudo pecl install redis
ထို့နောက် PHP.INI ဖိုင်တွင် Redis extension ကိုဖွင့်ပါ။
extension=redis.so
MySQL query ကို Redis သို့မည်သို့ cache ကိုမည်သို့သိမ်းဆည်းရမည်ကိုပြသသည့်ရိုးရှင်းသောဥပမာကုဒ်ဖြစ်သည်။
<?php
// ဆက် MySQL ဒေတာဘေ့စ်
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
// 检查ဆက်是否成功
if ($mysqli->connect_error) {
die('ဆက်失败: ' . $mysqli->connect_error);
}
// query cached keys
$queryKey = 'my_query_result';
// ဆက် Redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// ကြိုးစားကြည့်ပါ Redis သိုလှောင်ထားတဲ့ဒေတာကိုရယူပါ
$cachedResult = $redis->get($queryKey);
if ($cachedResult) {
// လှျင် Redis က cache ရလဒ်များရှိပါတယ်,တိုက်ရိုက်ပြန်လာပါ
$result = unserialize($cachedResult);
echo 'မှ Redis ဒေတာကိုရယူပါ:';
} else {
// လှျင် Redis အဘယ်သူမျှမ cache ရလဒ်များ,query ကို query and cache ရလဒ်များကို
$result = $mysqli->query('SELECT * FROM my_table');
// စုံစမ်းမှုရလဒ်များကို serialize နှင့်သိမ်းဆည်းပါ Redis
$redis->set($queryKey, serialize($result), 3600); // cache သက်တမ်းရှိကာလကိုသတ်မှတ်ပါ 1 နာရီ
echo 'မှ MySQL ဒေတာကိုရယူပါ:';
}
// Print Query ရလဒ်များ
while ($row = $result->fetch_assoc()) {
echo $row['column_name'] . "\n";
}
// 关闭ဆက်
$mysqli->close();
?>
ဒီဥပမာမှာကျွန်တော်တို့ဟာ cached query ကို redis ကနေရဖို့ကြိုးစားတယ်။ Redis တွင်ဒေတာသိုလှောင်ထားလျှင်၎င်းကိုတိုက်ရိုက်သုံးပါ။ သိုလှောင်ထားသည့်အချက်အလက်များမရှိပါကမေးခွန်းတစ်ခုကိုအကောင်အထည်ဖော်ရန်နှင့်ရလဒ်များကို redis တွင်သိုလှောင်ထားပါ။
အထူးသဖြင့်ဒေတာပြောင်းလဲသွားသည့်အခါ cache သည်အမြဲတမ်းတည်ရှိသင့်သည်။ ဒေတာအချိန်ဇယားကိုသေချာစေရန်သင် cache သက်တမ်းကုန်ဆုံးချိန်ကိုသတ်မှတ်နိုင်သည် (အထက်ပါဥပမာတွင် 3600 စက္ကန့်) ဖြစ်သည်။ လျှောက်လွှာ၏လိုအပ်ချက်များနှင့်အညီယခုအချိန်တွင်သင်ချိန်ညှိနိုင်သည်။
အကယ်. သင်သည် Redis ကိုမသုံးလိုပါကစုံစမ်းမှုရလဒ်များကို cache လုပ်ရန်ဖိုင်စနစ်ကိုအသုံးပြုရန်လည်းရွေးချယ်နိုင်သည်။ ဖိုင်စနစ် cache သည်အလွန်မြင့်မားသော 0 င်ရောက်နိုင်သည့်အမြန်နှုန်းမလိုအပ်သည့်အခြေအနေများအတွက်သင့်လျော်သည်။
ဖိုင်စနစ်အားမည်သည့် cache query ရလဒ်များရရှိသောရလဒ်များကိုမည်သို့ပြုလုပ်နိုင်သည့်ရိုးရှင်းသောဥပမာတစ်ခုဖြစ်သည်။
<?php
// ဆက် MySQL ဒေတာဘေ့စ်
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
// 检查ဆက်是否成功
if ($mysqli->connect_error) {
die('ဆက်失败: ' . $mysqli->connect_error);
}
// cached ဖိုင်လမ်းကြောင်းကိုမေးမြန်းပါ
$cacheFile = 'cache/my_query_result.cache';
// cache ဖိုင်တည်ရှိပြီးသက်တမ်းကုန်ဆုံးမနေစစ်ဆေးပါ
if (file_exists($cacheFile) && filemtime($cacheFile) > (time() - 3600)) {
// လှျင်缓存文件存在且未过期,ဖိုင်အကြောင်းအရာကိုဖတ်ပါ
$result = unserialize(file_get_contents($cacheFile));
echo 'မှ文件缓存ဒေတာကိုရယူပါ:';
} else {
// လှျင်缓存文件不存在或已过期,query ကို query and cache ရလဒ်များကို到文件
$result = $mysqli->query('SELECT * FROM my_table');
// စုံစမ်းမှုရလဒ်များကိုဖိုင်တစ်ခုသို့ဆိုင်းငံ့ထားပါ
file_put_contents($cacheFile, serialize($result));
echo 'မှ MySQL ဒေတာကိုရယူပါ:';
}
// Print Query ရလဒ်များ
while ($row = $result->fetch_assoc()) {
echo $row['column_name'] . "\n";
}
// 关闭ဆက်
$mysqli->close();
?>
ဤဥပမာတွင်ကျွန်ုပ်တို့သည်မေးမြန်းမှုရလဒ်များကို 0 န်ဆောင်မှုပေးပြီးဖိုင်တစ်ခုသို့သိမ်းဆည်းထားသည်။ အကယ်. ဖိုင်သည်သက်တမ်းကုန်ဆုံးခြင်းမရှိပါက, ဖိုင်များမှသိမ်းဆည်းထားသောရလဒ်များကိုကျွန်ုပ်တို့တိုက်ရိုက်ဖတ်ရှုပါမည်။ မဟုတ်ရင်မေးခွန်းကိုဖိုင်ကိုလွှဲပြောင်းပြီးဖိုင်ကိုသိမ်းဆည်းပါ။
Redis နှင့်ဆင်တူသည်, ဖိုင်စနစ် cache ကိုအသုံးပြုသောအခါကျွန်ုပ်တို့သည် cache သက်တမ်းကုန်ဆုံးချိန်ကိုသတ်မှတ်ရန်လိုအပ်သည်။ ဥပမာကုဒ်တွင် ဖိအားပေးမှု function သည်ဒေတာဘေ့စ်ကိုလိုအပ်သည်ကိုဆုံးဖြတ်ရန် Cached ဖိုင်၏နောက်ဆုံးပြင်ဆင်ခြင်းအချိန်ကိုဆုံးဖြတ်သည်။
MySQLI_RESult Query Query ကို Redis (သို့) ဖိုင်စနစ်များကိုသိမ်းဆည်းခြင်းအားဖြင့် PHP application များ၏စွမ်းဆောင်ရည်ကိုသိသိသာသာတိုးတက်အောင်လုပ်နိုင်ပြီး database တွင်ဝန်ထုပ်ဝန်ပိုးများကိုလျှော့ချနိုင်သည်။ Redis သည်အချက်အလက်များကိုမကြာခဏ 0 င်ရောက်နိုင်သည့်အခြေအနေများအတွက်ပိုမိုသင့်တော်သည်။ မည်သည့် cache ကိုရွေးချယ်ရန်နည်းလမ်းသည်သင်၏လျှောက်လွှာ၏လိုအပ်ချက်များနှင့်ဖြန့်ကျက်မှုပတ်ဝန်းကျင်ပေါ်တွင်မူတည်သည်။
သင် Redis သို့မဟုတ်ဖိုင်စနစ် cache ကိုရွေးချယ်သည်ဖြစ်စေ, အချက်အလက်များ၏အချိန်မီနှင့်တိကျမှန်ကန်မှုကိုသေချာစေရန်အမှန်တကယ်အခြေအနေအရသင့်တင့်လျောက်ပတ်သော cache ပျက်ကွက်ချိန်ကိုသတ်မှတ်ရန်လိုအပ်သည်။