အင်တာနက်အပလီကေးရှင်းများလျင်မြန်စွာဖွံ့ဖြိုးတိုးတက်မှုနှင့်အတူ Message queuing နည်းပညာသည်တစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းနှင့်ပြတ်တောင်းပြတ်တောင်းစစ်ဆင်ရေးများကိုကိုင်တွယ်ရန်အတွက်အဓိကကိရိယာတစ်ခုဖြစ်လာသည်။ ဤဆောင်းပါးသည်စနစ်၏ထိရောက်မှုနှင့်ယုံကြည်စိတ်ချရမှုများကိုသေချာစေရန်မက်ဆေ့ခ်ျကိုခွဲဝေမှုနှင့် MySQL မှတစ်ဆင့်သတင်းစကား IDEMPOTICE ကိုမည်သို့အောင်မြင်ရမည်ကိုမိတ်ဆက်ပေးလိမ့်မည်။
မက်ဆေ့ခ်ျ Queue သည် system ၏ပမာဏနှင့်ယုံကြည်စိတ်ချရမှုကိုထိရောက်စွာတိုးတက်စေရန်အတွက် application များအကြားမက်ဆေ့ခ်ျများဖြတ်သန်းရန်ယန္တရားအတွက်ယန္တရားတစ်ခုဖြစ်သည်။ သို့သော်အချို့သောစစ်ဆင်ရေးများကိုထပ်ခါတလဲလဲပြုလုပ်ရန်, အချက်အလက်ရှုပ်ထွေးမှုများသို့မဟုတ်ကိုက်ညီမှုကိုဖြစ်ပေါ်စေနိုင်သည့်တန်းတူညီမျှပုံတူပွားများပေါ်လာနိုင်သည်။ ဤအရာကိုရှောင်ရှားရန်ကျွန်ုပ်တို့သည်မက်ဆေ့ခ်ျများကိုခွဲဝေရန် Redis 'Set Data ဖွဲ့စည်းပုံကိုသုံးနိုင်သည်။
ကျွန်ုပ်တို့သည်ထပ်ဆင့်စာစောင်များကိုတရားစီရင်ရန်နှင့်ဖယ်ရှားရန် Redis ၏ Sismember နှင့် Sadd နည်းလမ်းများကိုသုံးနိုင်သည်။ ဤတွင် PHP Code ကိုအကောင်အထည်ဖော်သည်။
// ဆက်Redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// သတင်းကိုပြန်လုပ်ပါ
function deduplicate($message) {
if ($redis->sismember('processed_messages', $message)) {
return false; // လုပ်ငန်းများ၌မက်ဆေ့ခ်ျများ,နောက်တဖန်အပြောင်းအလဲနဲ့
}
// မက်ဆေ့ခ်ျများထုတ်ယူခြင်းအတွက်ယုတ္တိဗေဒ...
$redis->sadd('processed_messages', $message);
return true;
}
အထက်ဖော်ပြပါကုဒ်များတွင် "Processed` Processed_Messages "စုဆောင်းခြင်းတွင်မက်ဆေ့ခ်ျရှိပြီးသားဟုတ်မဟုတ်စစ်ဆေးပြီးမက်ဆေ့ခ်ျသည်တည်ရှိပြီးဖြစ်ပါကမှားယွင်းစွာပြန်ပို့သည်။
ဖြန့်ဝေထားသောစနစ်များတွင်ကွန်ယက်အကြောင်းပြချက်များကြောင့်မက်ဆေ့ခ်ျများကိုထပ်ခါတလဲလဲသုံးစွဲနိုင်ပြီးစနစ်၏တည်ငြိမ်မှုကိုထိခိုက်စေသည့်သတင်းစကားကိုအကြိမ်ကြိမ်လုပ်ဆောင်ခြင်းကိုအကြိမ်ကြိမ်ပြုလုပ်နိုင်သည်။ ဤပြ problem နာကိုဖြေရှင်းရန် MySQL ရှိထူးခြားသောညွှန်းကိန်းများမှတဆင့်မက်ဆေ့ခ်ျများကိုမက်ဆေ့ခ်ျများရရှိနိုင်ပါသည်။
ပထမ ဦး စွာ MySQL တွင်စားပွဲတစ်ခုဖန်တီးရန်လိုအပ်ပြီးပုံတူထည့်သွင်းခြင်းကိုတားဆီးရန်မက်ဆေ့ခ်ျအကွက်တစ်ခုအတွက်ထူးခြားသောအညွှန်းတစ်ခုကိုသတ်မှတ်ရန်လိုအပ်သည်။ ဤတွင်စားပွဲ၌ဖန်တီးခြင်းအတွက် SQL Code:
CREATE TABLE messages (
id INT AUTO_INCREMENT PRIMARY KEY,
message VARCHAR(255) NOT NULL,
UNIQUE KEY message_index (message)
);
ဤကုဒ်တွင်မက်ဆေ့ခ်ျတစ်ခုချင်းစီကိုတစ်ကြိမ်သာထည့်သွင်းနိုင်ရန်အတွက်မက်ဆေ့ခ်ျအကွက်တစ်ခုအတွက်ထူးခြားသောအညွှန်းတစ်ခုဖန်တီးသည်။
ထို့နောက်သတင်းစကားသည်မထည့်သွင်းမီဒေတာဘေ့စ်တွင်ရှိပြီးသားရှိမရှိတည်ရှိခြင်းရှိမရှိစစ်ဆေးရန်လိုအပ်သည်။ PHP Code ဥပမာတစ်ခု
// ဆက်MySQL
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
// Message Imotence အပြောင်းအလဲနဲ့
function handle_message($message) {
$escaped_message = $mysqli->real_escape_string($message);
$select_query = "SELECT id FROM messages WHERE message = '$escaped_message'";
$result = $mysqli->query($select_query);
if ($result->num_rows > 0) {
return; // မက်ဆေ့ခ်ျကိုရှိပြီးသား,နောက်တဖန်အပြောင်းအလဲနဲ့
}
// မက်ဆေ့ခ်ျများထုတ်ယူခြင်းအတွက်ယုတ္တိဗေဒ...
$insert_query = "INSERT INTO messages (message) VALUES ('$escaped_message')";
$mysqli->query($insert_query);
}
ဤကုဒ်တွင် SQL Injection ကိုကာကွယ်ရန် MySQLI ၏ Real_escape_Stape_String နည်းလမ်းကို အသုံးပြု. မက်ဆေ့ခ်ျများတည်ရှိခြင်း,
Redis နှင့် MySQL ကိုပေါင်းစပ်ခြင်းအားဖြင့် Queening နည်းပညာသည် PHP နှင့် MySQL ရှိသတင်းစကားကို depeduplication နှင့် MySQL ရှိသတင်းစကား Idempotence ပြ problem နာကိုထိရောက်စွာဖြေရှင်းနိုင်သည်။ မက်ဆေ့ခ်ျကိုခွဲထွက်သတ်မှုကိုအကောင်အထည်ဖော်ခြင်းမက်ဆေ့ခ်ျများမိတ္တူပွားခြင်းနှင့်စနစ်စွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်နှင့်စနစ်တည်ငြိမ်မှုကိုတိုးတက်စေရန်မတားဆီးနိုင်ပါ။ လက်တွေ့ကျသောအပလီကေးရှင်းများအနေဖြင့်သတင်းစကားအပြောင်းအလဲအတွက်လုပ်ငန်းစဉ်ကိုစီးပွားရေးလိုအပ်ချက်များနှင့်အညီပိုမိုကောင်းမွန်အောင်ပြုလုပ်နိုင်ပြီးစနစ်၏ယုံကြည်စိတ်ချရမှုကိုတိုးတက်စေနိုင်သည်။
သက်ဆိုင်သောတက်(ဂ်)များ:
MySQL