Rumah >pembangunan bahagian belakang >tutorial php >Senario aplikasi kegigihan mesej baris gilir dan penyahduplikasian mesej dalam PHP dan MySQL

Senario aplikasi kegigihan mesej baris gilir dan penyahduplikasian mesej dalam PHP dan MySQL

WBOY
WBOYasal
2023-10-15 13:42:46864semak imbas

Senario aplikasi kegigihan mesej baris gilir dan penyahduplikasian mesej dalam PHP dan MySQL

Senario aplikasi kegigihan mesej baris gilir dan penyahduplikasian mesej dalam PHP dan MySQL

Baris gilir ialah struktur data biasa yang digunakan secara meluas dalam pemprosesan mesej tak segerak, penjadualan tugas, pengumpulan log, dll. dalam adegan pembangunan perisian. Antaranya, ketekunan mesej dan deduplikasi mesej adalah dua ciri penting dalam baris gilir, yang boleh memastikan kebolehpercayaan mesej dan konsistensi data. Dalam PHP dan MySQL, aplikasi baris gilir boleh menggunakan Redis sebagai perisian tengah mesej dan MySQL untuk menyimpan dan mengurus metadata baris gilir Contoh khusus adalah seperti berikut.

Pertama, anda perlu memasang dan mengkonfigurasi Redis dan MySQL untuk menyokong operasi baris gilir. Kami menganggap bahawa pemasangan dan konfigurasi Redis dan MySQL telah selesai, dan sambungan Redis dan MySQL telah dipasang dalam PHP.

Berikut ialah contoh kod yang menggunakan PHP dan Redis untuk melaksanakan baris gilir:

<?php

// 链接Redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 将消息插入队列
$redis->rpush('queue', 'message1');
$redis->rpush('queue', 'message2');
$redis->rpush('queue', 'message3');

// 从队列中读取消息
$message = $redis->lpop('queue');
while ($message) {
    echo $message . PHP_EOL;
    $message = $redis->lpop('queue');
}
?>

Dalam kod di atas, kami menggunakan kaedah rpush Redis untuk memasukkan mesej ke dalam ekor baris gilir, gunakan kaedah lpop untuk membaca mesej daripada ketua baris gilir, dan Baca dalam gelung sehingga baris gilir kosong.

Seterusnya, kita perlu menggunakan MySQL untuk mencapai ketekunan dan penyahduplikasian mesej. Mula-mula, buat jadual untuk menyimpan metadata mesej, termasuk medan seperti ID mesej dan status pemprosesan.

CREATE TABLE `queue` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `message` varchar(255) DEFAULT NULL,
  `status` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `message` (`message`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Kemudian, kita boleh menulis kod PHP untuk mengekalkan mesej ke dalam MySQL, dan melakukan pertimbangan penduadua sebelum memasukkan untuk mengelakkan kemasukan berulang bagi mesej yang sama.

<?php

// 链接MySQL
$mysqli = new mysqli('localhost', 'root', 'password', 'database');

// 将消息插入队列
$message = 'message1';
$exists = $mysqli->query("SELECT * FROM queue WHERE message = '$message'");
if ($exists->num_rows == 0) {
    $mysqli->query("INSERT INTO queue (message) VALUES ('$message')");
}

// 从队列中读取消息
$result = $mysqli->query("SELECT * FROM queue WHERE status = 0");
while ($row = $result->fetch_assoc()) {
    echo $row['message'] . PHP_EOL;
    
    // 标记消息为已处理
    $id = $row['id'];
    $mysqli->query("UPDATE queue SET status = 1 WHERE id = $id");
}

// 关闭连接
$mysqli->close();
?>

Dalam kod di atas, kami menggunakan sambungan mysqli untuk menyambung ke pangkalan data MySQL dan menentukan sama ada mesej itu sudah wujud dalam baris gilir melalui pertanyaan. Jika ia tidak wujud, mesej akan dimasukkan ke dalam baris gilir. Apabila membaca mesej, kami membuat pertanyaan untuk mesej yang tidak diproses dan membaca setiap mesej melalui gelung dan menandakan statusnya sebagai diproses.

Ringkasnya, kegigihan mesej baris gilir dan penyahduplikasian mesej adalah teknologi yang biasa digunakan dalam pembangunan, yang boleh memastikan kebolehpercayaan mesej dan ketekalan data. Artikel ini memperkenalkan contoh kod untuk menggunakan PHP dan Redis untuk melaksanakan baris gilir, dan menggabungkannya dengan MySQL untuk mencapai kegigihan dan penyahduplikasian mesej. Saya harap artikel ini dapat membantu anda memahami senario aplikasi dan kaedah pelaksanaan baris gilir.

Atas ialah kandungan terperinci Senario aplikasi kegigihan mesej baris gilir dan penyahduplikasian 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