Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Idempotensi mesej dan kaedah pemprosesan deduplikasi data teknologi baris gilir dalam PHP dan MySQL

Idempotensi mesej dan kaedah pemprosesan deduplikasi data teknologi baris gilir dalam PHP dan MySQL

PHPz
PHPzasal
2023-10-15 11:28:51775semak imbas

Idempotensi mesej dan kaedah pemprosesan deduplikasi data teknologi baris gilir dalam PHP dan MySQL

Mesej mati pucuk dan kaedah pemprosesan penyahduplikasian data teknologi baris gilir dalam PHP dan MySQL

Pengenalan:
Dengan perkembangan pesat Internet, volum serentak tapak web dan aplikasi terus meningkat, dan keperluan kecekapan untuk penyimpanan dan pemprosesan data juga semakin tinggi. Teknologi baris gilir telah menjadi salah satu alat penting untuk menyelesaikan masalah pemprosesan data dalam senario konkurensi tinggi. Artikel ini akan memperkenalkan cara menggunakan teknologi baris gilir untuk melaksanakan ketidakupayaan mesej dan penyahduplikasian data dalam PHP dan MySQL, dan menyediakan contoh kod yang sepadan.

1 Pengenalan kepada Teknologi Queue
Queue ialah struktur data biasa yang mengikut prinsip first-in-first-out (FIFO). Dalam aplikasi, baris gilir digunakan untuk menyelesaikan masalah seperti pemprosesan tak segerak dan penjadualan tugas. Teknologi baris gilir biasa termasuk Gilir Mesej, Giliran Tugas, dsb.

2. Cara mengendalikan mati pucuk mesej
Dalam senario konkurensi tinggi, mesej yang sama mungkin diproses beberapa kali. Untuk memastikan ketepatan data, idempotensi mesej perlu dipastikan. Mati pucuk bermakna tidak kira berapa kali operasi yang sama dilakukan, hasilnya adalah sama.

  1. Jana pengecam unik
    UUID (Universally Unique Identifier) ​​​​boleh digunakan dalam PHP untuk menjana pengecam unik. UUID merujuk kepada nombor yang dijana pada mesin dan unik di peringkat global.
function generateUniqueId(){
    if (function_exists('uuid_create')) {
        $objUuid = uuid_create(UUID_TYPE_RANDOM);
        $strUuid = uuid_export($objUuid);
    } else {
        $strUuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff),
        mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000,
        mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
        );
    }
  return $strUuid;
}
  1. Penyahduplikasi mesej
    Sebelum memproses mesej, anda boleh mencapai ini dengan menyimpan pengecam unik mesej dalam jadual MySQL dan menetapkan indeks unik. deduplikasi mesej. Di bawah adalah contoh struktur jadual MySQL.
CREATE TABLE `message_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `message_id` varchar(255) NOT NULL,
  `payload` text NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_index` (`message_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Sebelum memproses mesej, tanya dahulu jadual MySQL untuk menentukan sama ada mesej itu sudah wujud. Jika ia tidak wujud, lakukan pemprosesan data Jika ia sudah wujud, kembalikan kejayaan secara langsung.

$strMessageId = generateUniqueId();
$objDb = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$strQuery = "INSERT IGNORE INTO message_table (message_id, payload) VALUES (:message_id, :payload)";
$objStmt = $objDb->prepare($strQuery);
$objStmt->bindParam(':message_id', $strMessageId, PDO::PARAM_STR);
$objStmt->bindParam(':payload', $strPayload, PDO::PARAM_STR);
$objStmt->execute();

if ($objStmt->rowCount() == 1) {
    // 数据处理逻辑
    // ...
    echo "处理成功";
} else {
    echo "消息已经存在";
}

3. Ringkasan
Melalui teknologi baris gilir, kita boleh mencapai ketidakupayaan mesej dan penyahduplikasian data. Menjana pengecam unik memastikan bahawa mesej adalah unik di peringkat global, manakala menggunakan indeks unik di atas meja membolehkan penyahduplikasian. Dalam aplikasi praktikal, ia boleh dilaraskan dan dioptimumkan mengikut keperluan perniagaan tertentu.

Panjang artikel adalah terhad.Artikel ini hanya memperkenalkan secara ringkas prinsip asas ketidakupayaan mesej dan kaedah pemprosesan penyahduplikasian teknologi baris gilir dalam PHP dan MySQL, dan menyediakan Contoh kod. Saya harap ia akan membantu pembaca dan membolehkan anda menggunakan teknologi baris gilir dengan lebih baik untuk menyelesaikan masalah konkurensi dalam aplikasi sebenar.

Atas ialah kandungan terperinci Idempotensi mesej dan kaedah pemprosesan deduplikasi data teknologi baris gilir dalam PHP dan MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn