လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> DNS_GEGET_REACORCORD function ၏ quing ကိုအကောင်းဆုံးလုပ်ဆောင်ရန်နည်းလမ်းများကဘာတွေလဲ။

DNS_GEGET_REACORCORD function ၏ quing ကိုအကောင်းဆုံးလုပ်ဆောင်ရန်နည်းလမ်းများကဘာတွေလဲ။

M66 2025-06-22

1.Cached DNS Query ရလဒ်များ

အထူးသဖြင့်ဒိုမိန်းအမည်ကိုအကြိမ်ကြိမ်မေးမြန်းသည့်အခါ DNS မေးမြန်းချက်များသည်များသောအားဖြင့်အချိန်ကုန်သောစစ်ဆင်ရေးများဖြစ်သည်။ မကြာခဏ DNS မေးမြန်းချက်များကိုလျှော့ချရန် Cache ယန္တရားကိုဖြေရှင်းရန် DNS မှတ်တမ်းများကိုသိမ်းဆည်းရန်အသုံးပြုနိုင်သည်။ DNS မေးမြန်းချက်များ၏ရလဒ်များကို apcu သို့မဟုတ် memcached သုံး. သို့မဟုတ်ဒေတာဘေ့စ်သို့ရေးသားခြင်းကဲ့သို့သောမှတ်ဉာဏ်ထဲသို့သိမ်းဆည်းထားနိုင်သည်။ ဒိုမိန်းအမည်ကိုမေးမြန်းရန်လိုအပ်သည့်အခါတိုင်း cache ထဲတွင်သက်ဆိုင်ရာစံချိန်ရှိ, ရှိမရှိပထမ ဦး ဆုံးစစ်ဆေးပါ။ သို့ဆိုလျှင် cache ထဲရှိအချက်အလက်များကို DNS Quering မလုပ်ဘဲတိုက်ရိုက်ပြန်လာလိမ့်မည်။

 $domain = 'example.com';
$cacheKey = 'dns_' . md5($domain);

// cache ကိုစစ်ဆေးပါ
if ($cachedRecord = apcu_fetch($cacheKey)) {
    $records = $cachedRecord;
} else {
    // ကရိယာတန်းဆာ DNS မေးမြန်း
    $records = dns_get_record($domain);
    // 将မေးမြန်း结果သိုကာတာ
    apcu_store($cacheKey, $records, 3600); // သိုကာတာ 1 နာရီ
}

// ထုတ်လုပ်ခြင်း DNS စံချိန်
print_r($records);

2 ။ Query အမျိုးအစားများကိုကန့်သတ်ပါ

DNS_GET_RECOCOD function သည် DNS မေးမြန်းမှုအမျိုးအစားများ (ဥပမာ, AAAA, MX စသည်) ။ DNS မေးမြန်းချက်များကိုပြုလုပ်သောအခါမလိုအပ်သောသတင်းအချက်အလက်များကိုရှာဖွေခြင်းကိုရှောင်ရှားရန် Query အမျိုးအစားများကိုကန့်သတ်ရန်ကြိုးစားသင့်သည်။ ၎င်းသည်စုံစမ်းမှု၏ရှုပ်ထွေးမှုနှင့်အချိန်ကိုလျော့နည်းစေသည်။ ဥပမာအားဖြင့်, အကယ်. သင်သည် IP လိပ်စာကိုသာဂရုစိုက်ပါကမှတ်တမ်းတစ်ခုသို့မဟုတ် AAAA မှတ်တမ်းကိုမေးမြန်းရန်သင်သတ်မှတ်နိုင်သည်။

 $domain = 'example.com';
$records = dns_get_record($domain, DNS_A); // 仅မေးမြန်း A စံချိန်

print_r($records);

3 ။ asynchronous စုံစမ်းမှုကိုသုံးပါ

DNS_GEGGET_RECROCOD သည်ပိတ်ဆို့ခြင်းပိတ်ဆို့ခြင်းဖြစ်သည်။ ဆိုလိုသည်မှာရလဒ်ကိုမပြန်မီ DNS မေးမြန်းမှုကိုစောင့်ဆိုင်းလိမ့်မည်။ အကယ်. သင်သည်တစ်ချိန်တည်းတွင်ဒိုမိန်းအမည်မျိုးစုံကိုမေးမြန်းရန်လိုအပ်ပါကထိရောက်မှုတိုးတက်စေရန်ပြတ်တောင်းပြတ်တောင်းမေးမြန်းချက်များကို အသုံးပြု. စဉ်းစားနိုင်သည်။ Multiple DNS မေးမြန်းချက်များကိုအပြိုင်အဆိုင်မေးမြန်းရန်အပြိုင်တွင်ကွပ်မျက်နိုင်သည်။

ဘုံအလေ့အကျင့်တစ်ခုမှာ DNS မေးမြန်းချက်မျိုးစုံကိုအပြိုင်ခွဲခြားရန် curl extension များကိုအသုံးပြုရန်ဖြစ်သည်။ ဥပမာအားဖြင့်, URL တောင်းဆိုမှုများစွာနှင့်အတူ curl session တစ်ခုဖန်တီးပြီးတောင်းဆိုမှုတစ်ခုပြီးဆုံးပြီးနောက်ချက်ချင်းတောင်းဆိုမှုကိုပြုလုပ်ပါ။ ၎င်းသည် dns_get_record ကို တိုက်ရိုက်မသုံးသော်လည်းစွမ်းဆောင်ရည်သည်အခြားနည်းများဖြင့်တိုးတက်အောင်လုပ်နိုင်သည်။

 $domains = ['example.com', 'test.com', 'm66.net'];
$multiCurl = [];
$mh = curl_multi_init();

// မျိုးစုံဖန်တီးပါ cURL မေးမြန်း
foreach ($domains as $index => $domain) {
    $multiCurl[$index] = curl_init();
    curl_setopt($multiCurl[$index], CURLOPT_URL, 'http://' . $domain);
    curl_setopt($multiCurl[$index], CURLOPT_RETURNTRANSFER, 1);
    curl_multi_add_handle($mh, $multiCurl[$index]);
}

// ကရိယာတန်းဆာမေးမြန်း
$running = null;
do {
    curl_multi_exec($mh, $running);
} while ($running > 0);

// ရလဒ်များကိုရယူပါ
foreach ($domains as $index => $domain) {
    $response = curl_multi_getcontent($multiCurl[$index]);
    echo "Domain: $domain\n";
    echo $response . "\n";
}

// ဆက်သွယ်မှုကိုပိတ်ပါ
foreach ($domains as $index => $domain) {
    curl_multi_remove_handle($mh, $multiCurl[$index]);
}
curl_multi_close($mh);

4 ။ ဒေသခံ DNS server ကိုသုံးပါ

ပုံမှန်အားဖြင့် PHP ၏ dns_get_record သည် System's DNS Resolution Server မှတစ်ဆင့်မှတ်တမ်းများကိုရယူလိမ့်မည်။ ကြိမ်နှုန်းမြင့်မားသော DNS Query Scs တွင် Google သို့မဟုတ် cloudflare ကဲ့သို့သောအများပြည်သူ dns server ကိုအသုံးပြုခြင်းသည်မြင့်မားသော latency ကိုဖြစ်စေနိုင်သည်။ ထို့ကြောင့် DNS မေးမြန်းချက်များကိုအထူးသဖြင့် DNS မေးမြန်းချက်များ၏တုံ့ပြန်မှုကိုသိသိသာသာလျှော့ချနိုင်သည့် DNS မေးမြန်းချက်များကိုအရှိန်မြှင့်ရန်ဒေသတွင်းချထားသည့် DNS server ကို အသုံးပြု. စဉ်းစားပါ။


5 ။ DNS Polling ကိုသုံးပါ

တစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းပတ် 0 န်းကျင်များတွင်မကြာခဏအချို့သောဒိုမိန်းအမည်အချို့ကိုမကြာခဏမေးမြန်းခြင်းသည် DNS ဆာဗာများကိုနှေးကွေးစွာတုံ့ပြန်နိုင်သည်။ ဝန်ကိုဖြန့်ဝေရန် DNS ဆာဗာများစွာကို DNS Load Balancing မှတဆင့်ရှာဖွေရန်နှင့်မေးမြန်းရန်အသုံးပြုနိုင်သည်။ TRASS server နှင့်ပြ a နာရှိသည့်အခါအလိုအလျှောက်ပြောင်းရန်အရံရှိ DNS server ကိုကိုယ်တိုင်ရှာဖွေရန်အတွက် DNS ဆာဗာများကိုကိုယ်တိုင်ရွေးချယ်နိုင်သည်။

 $domains = ['example.com', 'm66.net'];
$dnsServers = ['8.8.8.8', '1.1.1.1']; // မလွတ်သွမ်း DNS ဆာဆာ
$dnsServerIndex = 0;

// စက်ခလုတ် DNS ဆာဆာ
$records = dns_get_record($domains[0], DNS_A, $dnsServers[$dnsServerIndex]);
print_r($records);

6 ။ DNS မေးမြန်းချက်များ၏ကြိမ်နှုန်းကိုလျှော့ချပါ

အချို့ဖြစ်ရပ်များတွင်မကြာခဏ DNS မေးမြန်းချက်များသည်အထူးသဖြင့်စုံစမ်းမှုရလဒ်များမကြာခဏမပြောင်းလဲပါကအထူးသဖြင့်မလိုအပ်ပါ။ စုံစမ်းမှုများကိုနှောင့်နှေးခြင်းသို့မဟုတ်စုံစမ်းမှုအကြိမ်ရေကိုလျှော့ချခြင်းဖြင့်စွမ်းဆောင်ရည်ကိုအကောင်းဆုံးလုပ်နိုင်သည်။ ဥပမာအားဖြင့်ဒိုမိန်းအမည်ကို DNS မှတ်တမ်းများမှတ်တမ်းများကိုအချိန်မှန်မေးမြန်းခြင်းမပြုမည့်အစားပုံမှန်အဆင့်မြှင့်တင်နိုင်သည်။ cache ယန္တရားမသက်ဆိုင်သောအခြေအနေများသည်မသက်ဆိုင်သောအခြေအနေများအတွက် Query Intervals များကိုသတ်မှတ်ခြင်းဖြင့် dns မေးမြန်းချက်များကိုသင်ရှောင်ရှားနိုင်သည်။

 // အခြားတိုင်း 10 分钟才မေးမြန်း一次 DNS စံချိန်
$lastChecked = time() - 600; // 假设上次မေးမြန်း是在 10 မိနစ်အကြာ

if (time() - $lastChecked >= 600) {
    $records = dns_get_record('example.com');
    // 更新မေးမြန်း时间
    $lastChecked = time();
    print_r($records);
}

7 ။ သင့်လျော်သော DNS Query စာကြည့်တိုက်ကိုရွေးချယ်ပါ

PHPT native DNS_GEGET_RECORD သည် application အားလုံးတွင်မသင့်တော်ပါ။ အချို့ဖြစ်ရပ်များတွင် PHP-DNS ကဲ့သို့သောပိုမိုထိရောက်သောတတိယပါတီစာကြည့်တိုက်များ အသုံးပြု . PHP-DNS , တုန့်ပြန်ခြင်း \ dns စသည်တို့ကိုပိုမိုကောင်းမွန်စေသည်။ ဤစာကြည့်တိုက်များသည်များသောအားဖြင့်ပြတ်တောင်းပြတ်တောင်းအထောက်အပံ့များ,

ဥပမာအားဖြင့်, တုန့်ပြန် \ DNS သည် DNS တောင်းဆိုမှုများကိုတစ်ပြိုင်နက်တည်းလုပ်ဆောင်ရန်ခွင့်ပြုရန် DNS တောင်းဆိုမှုများကိုတစ်ပြိုင်တည်းလုပ်ဆောင်ရန်ခွင့်ပြုရန်ပြတ်တောင်းပြတ်တောင်း DNS Quering Cass တို့ကိုထောက်ပံ့ပေးသည်။