Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Aplikasi teknologi baris gilir dalam penyahduplikasian mesej dan mati pucuk mesej dalam PHP dan MySQL

Aplikasi teknologi baris gilir dalam penyahduplikasian mesej dan mati pucuk mesej dalam PHP dan MySQL

王林
王林asal
2023-10-15 12:18:191326semak imbas

Aplikasi teknologi baris gilir dalam penyahduplikasian mesej dan mati pucuk mesej dalam PHP dan MySQL

Aplikasi teknologi baris gilir dalam penyahduplikasian mesej dan mati pucuk mesej dalam PHP dan MySQL

Abstrak: Dengan pembangunan berterusan aplikasi Internet, baris gilir mesej telah menjadi salah satu alat penting untuk mengendalikan operasi serentak tinggi dan tak segerak. Dalam PHP dan MySQL, bagaimana untuk menggunakan baris gilir untuk menyelesaikan masalah deduplikasi mesej dan mati pucuk mesej? Artikel ini akan memperkenalkan contoh kod khusus menggunakan Redis dan MySQL untuk melaksanakan kedua-dua fungsi ini.

  1. Pengenalan
    Baris gilir mesej ialah kaedah penyampaian mesej antara aplikasi, yang boleh meningkatkan kebolehskalaan dan kebolehpercayaan sistem. Terdapat banyak alat baris gilir mesej yang matang dalam medan PHP, seperti RabbitMQ, Kafka, dan Redis, manakala MySQL ialah pangkalan data hubungan biasa.
  2. Penyahduplikasi mesej
    Dalam baris gilir mesej, mesej pendua kadangkala muncul Disebabkan mesej berulang, sesetengah operasi mungkin berulang, menyebabkan kekeliruan data atau masalah lain. Untuk menyelesaikan masalah ini, kami boleh menggunakan struktur data Set Redis untuk menyahduplikasi mesej.

Kod sampel adalah seperti berikut:

// 连接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;
}

Dalam kod di atas, kami menggunakan kaedah sismember dan sadd Redis untuk menentukan sama ada mesej telah diproses. Jika mesej sudah wujud dalam koleksi Redis processed_messages, ini bermakna mesej telah diproses dan palsu akan dikembalikan secara langsung. Jika tidak, proses mesej dan tambahkannya pada koleksi.

  1. Mesej mati pucuk
    Dalam sistem yang diedarkan, disebabkan oleh rangkaian dan sebab lain, mesej mungkin digunakan berulang kali. Untuk memastikan ketepatan sistem, mesej perlu diproses secara idempoten, iaitu memproses mesej yang sama beberapa kali mempunyai kesan yang sama seperti memprosesnya sekali. Dalam MySQL, kita boleh menggunakan indeks unik untuk mencapai ketidakupayaan mesej.

Kod sampel adalah seperti berikut:

CREATE TABLE messages (
    id INT AUTO_INCREMENT PRIMARY KEY,
    message VARCHAR(255) NOT NULL
    UNIQUE KEY message_index (message)
);

Dalam kod di atas, kami mencipta jadual mesej, di mana medan mesej mentakrifkan indeks unik melalui UNIQUE KEY. Seterusnya, sebelum memasukkan mesej, kita perlu menentukan sama ada mesej itu sudah wujud.

Kod sampel adalah seperti berikut:

// 连接MySQL
$mysqli = new mysqli('localhost', 'username', 'password', 'database');

// 消息幂等性处理
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);
}

Dalam kod di atas, kami menggunakan kaedah real_escape_string mysqli untuk melepaskan mesej dan menghalang serangan suntikan SQL. Kemudian, kami menanyakan jadual mesej untuk menentukan sama ada mesej sudah wujud Jika bilangan baris dalam set hasil lebih daripada 0, ini bermakna mesej itu sudah wujud dan boleh dikembalikan secara langsung. Jika tidak, proses mesej dan masukkan ke dalam jadual.

  1. Kesimpulan
    Dengan menggunakan Redis dan MySQL, kita dapat merealisasikan penerapan teknologi baris gilir dalam penyahduplikasian mesej dan hilang upaya mesej dalam PHP dan MySQL. Melalui penyahduplikasian mesej, kita boleh mengelakkan pemprosesan mesej berulang dan meningkatkan prestasi dan kebolehpercayaan sistem dengan menyedari ketidakupayaan mesej, kita boleh memastikan ketepatan sistem dan mengelakkan kesan sampingan pemprosesan mesej yang sama beberapa kali. Dalam aplikasi praktikal, mesej juga boleh diproses dengan lebih fleksibel mengikut keperluan perniagaan.

Rujukan:

  • Dokumentasi rasmi Redis: https://redis.io/documentation
  • Dokumentasi rasmi MySQL: https://dev.mysql.com/doc/

Atas ialah kandungan terperinci Aplikasi teknologi baris gilir dalam penyahduplikasian mesej dan mati pucuk mesej 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