Rumah pembangunan bahagian belakang tutorial php Baris gilir penyahduplikasian mesej dan kaedah pemprosesan mati pucuk dalam PHP dan MySQL

Baris gilir penyahduplikasian mesej dan kaedah pemprosesan mati pucuk dalam PHP dan MySQL

Oct 15, 2023 am 10:30 AM
mysql php beratur

Baris gilir penyahduplikasian mesej dan kaedah pemprosesan mati pucuk dalam PHP dan MySQL

Cara mengendalikan penyahduplikasian mesej dan mati pucuk mesej dalam baris gilir dalam PHP dan MySQL

Dalam pembangunan sebenar, kami sering Menggunakan baris gilir mesej untuk memproses tak segerak tugas untuk meningkatkan prestasi dan kebolehpercayaan sistem. Walau bagaimanapun, apabila menggunakan baris gilir, kami sering menghadapi masalah dengan penyahduplikasian mesej dan pemprosesan idempoten. Artikel ini akan memperkenalkan beberapa kaedah biasa untuk mengendalikan penyahduplikasian mesej dan mati pucuk mesej dalam PHP dan MySQL, dan memberikan contoh kod khusus.

  1. Kaedah pemprosesan deduplikasi mesej

Deduplikasi mesej bermakna jika mesej yang sama sudah wujud dalam baris gilir mesej, ia tidak akan diulang dengan. Terdapat banyak cara untuk mengendalikan penyahduplikasian mesej. Berikut ialah kaedah pemprosesan penyahduplikasian berasaskan Redis:

a) Gunakan koleksi pesanan Redis ZADD

Pertama sekali, kami boleh menggunakan koleksi pesanan Redis untuk memproses pemprosesan penyahduplikasian mesej. Kami menggunakan pengecam unik mesej sebagai ahli set yang dipesan, dan cap masa mesej sebagai skor set yang dipesan. Apabila mesej baharu diterima, kami boleh menggunakan arahan ZADD untuk menambah pengecam unik dan cap masa mesej pada koleksi yang dipesan. Kemudian, kita boleh menggunakan arahan ZSCORE untuk menanyakan cap masa mesej Jika cap masa berada dalam julat ambang tertentu, mesej itu dianggap sudah wujud dan tidak akan diproses lagi.

Berikut ialah contoh kod penyahduplikasian mesej berdasarkan Redis:

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

function processMessage($message) {
    $messageId = generateUniqueId($message);
    $timestamp = time();

    // 判断消息是否已经存在
    $existingTimestamp = $redis->zscore('message:deduplication', $messageId);

    // 如果消息存在并且时间戳在一定范围内,则不进行处理
    if ($existingTimestamp && $timestamp - $existingTimestamp <= 60) {
        return;
    }

    // 处理消息
    // ...

    // 将消息的唯一标识和时间戳添加到有序集合中
    $redis->zadd('message:deduplication', $timestamp, $messageId);
}

function generateUniqueId($message) {
    // 生成消息的唯一标识
    // ...
    return $uniqueId;
}
Salin selepas log masuk

Dalam kod di atas, kami mula-mula menjananya melalui fungsi generateUniqueId Pengecam unik mesej. Kemudian, gunakan perintah zscore untuk menanyakan cap masa mesej untuk menentukan sama ada mesej itu sudah wujud dan cap masa berada dalam julat tertentu. Jika mesej sudah wujud, tiada pemprosesan dilakukan Jika tidak, mesej akan diproses dan pengecam unik serta cap masa mesej itu ditambahkan pada set tertib. generateUniqueId函数生成消息的唯一标识。然后,通过zscore命令查询消息的时间戳,判断消息是否已经存在,并且时间戳在一定范围内。如果消息已经存在,则不进行处理,否则,进行消息的处理,并将消息的唯一标识和时间戳添加到有序集合中。

b) 使用MySQL表的唯一索引

除了Redis,我们还可以利用MySQL表的唯一索引来进行消息的去重处理。我们可以创建一个消息表,表中包含一个唯一索引字段,用来存储消息的唯一标识。当收到一条新消息时,我们尝试向消息表中插入一条记录,如果插入失败,则说明消息已经存在,不再进行处理。否则,进行消息的处理。

下面是一个基于MySQL的消息去重处理的代码示例:

<?php
$mysqli = new mysqli('localhost', 'username', 'password', 'database');

function processMessage($message) {
    $messageId = generateUniqueId($message);

    $sql = "INSERT IGNORE INTO message_deduplication (message_id) VALUES ('$messageId')";

    if ($mysqli->query($sql)) {
        // 插入成功,处理消息
        // ...
    } else {
        // 消息已经存在,不再处理
    }
}

function generateUniqueId($message) {
    // 生成消息的唯一标识
    // ...
    return $uniqueId;
}
Salin selepas log masuk

在上面的代码中,我们通过generateUniqueId函数生成消息的唯一标识。然后,尝试向message_deduplication表中插入一条记录,使用INSERT IGNORE语句避免插入重复的记录。如果插入成功,则说明消息不存在,进行消息的处理;否则,说明消息已经存在,不再进行处理。

  1. 消息幂等性处理方法

消息幂等性是指对于同一条消息的多次处理,只会产生一次业务影响。处理消息幂等性的方法有多种。下面给出一种基于数据库的幂等性处理方法:

a) 在处理消息前查询数据库状态

在处理消息时,我们可以在数据库中创建一个状态表,用来记录消息的处理状态。当收到一条新消息时,首先查询状态表,判断消息是否已经处理。如果消息已经处理,则不进行处理;否则,进行消息的处理,并将消息的处理状态更新到状态表中。

下面是一个基于MySQL的消息幂等性处理的代码示例:

<?php
$mysqli = new mysqli('localhost', 'username', 'password', 'database');

function processMessage($message) {
    $messageId = generateUniqueId($message);

    // 查询处理状态
    $sql = "SELECT status FROM message_processing WHERE message_id = '$messageId'";
    $result = $mysqli->query($sql);

    if ($result && $result->num_rows > 0) {
        $row = $result->fetch_assoc();
        $status = $row['status'];

        // 如果处理状态为已处理,则不再处理
        if ($status == 1) {
            return;
        }
    }

    // 处理消息
    // ...

    // 更新处理状态
    $sql = "INSERT INTO message_processing (message_id, status) VALUES ('$messageId', 1) ON DUPLICATE KEY UPDATE status = 1";
    $mysqli->query($sql);
}

function generateUniqueId($message) {
    // 生成消息的唯一标识
    // ...
    return $uniqueId;
}
Salin selepas log masuk

在上面的代码中,我们首先通过generateUniqueId函数生成消息的唯一标识。然后,通过查询message_processing

b) Menggunakan indeks unik jadual MySQL

Selain Redis, kami juga boleh menggunakan indeks unik jadual MySQL untuk menyahduplikasi mesej. Kita boleh mencipta jadual mesej yang mengandungi medan indeks unik untuk menyimpan pengecam unik mesej. Apabila mesej baharu diterima, kami cuba memasukkan rekod ke dalam jadual mesej Jika sisipan gagal, mesej sudah wujud dan tidak akan diproses lagi. Jika tidak, proses mesej.

Berikut ialah contoh kod penyahduplikasian mesej berdasarkan MySQL: #🎜🎜#rrreee#🎜🎜#Dalam kod di atas, kami menjana mesej melalui fungsi generateUniqueId yang unik pengecam. Kemudian, cuba masukkan rekod ke dalam jadual message_deduplication, menggunakan pernyataan INSERT IGNORE untuk mengelak daripada memasukkan rekod pendua. Jika sisipan berjaya, ia bermakna mesej tidak wujud dan mesej akan diproses jika tidak, ia bermakna mesej sudah wujud dan tiada pemprosesan selanjutnya akan dilakukan. #🎜🎜#
    #🎜🎜#Mesej mati pucuk kaedah pemprosesan#🎜🎜##🎜🎜##🎜🎜#Mesej mati pucuk merujuk kepada berbilang pemprosesan mesej yang sama, hanya akan ada kesan perniagaan . Terdapat beberapa cara untuk mengendalikan ketidakupayaan mesej. Berikut ialah kaedah pemprosesan idempotensi berasaskan pangkalan data: #🎜🎜##🎜🎜#a) Tanya status pangkalan data sebelum memproses mesej #🎜🎜##🎜🎜#Apabila memproses mesej, kita boleh mencipta jadual status A yang digunakan untuk merekodkan status pemprosesan mesej. Apabila mesej baharu diterima, jadual status pertama kali disoal untuk menentukan sama ada mesej telah diproses. Jika mesej telah diproses, tiada pemprosesan dilakukan jika tidak, mesej diproses dan status pemprosesan mesej dikemas kini dalam jadual status. #🎜🎜##🎜🎜#Berikut ialah contoh kod pemprosesan mati pucuk mesej berdasarkan MySQL: #🎜🎜#rrreee#🎜🎜#Dalam kod di atas, kami mula-mula lulus fungsi generateUniqueId Generates pengecam unik untuk mesej. Kemudian, tentukan status pemprosesan mesej dengan menanyakan jadual message_processing. Jika status pemprosesan diproses, tiada pemprosesan selanjutnya akan dilakukan Jika status pemprosesan tidak diproses, mesej akan diproses dan status pemprosesan akan dikemas kini untuk diproses. #🎜🎜##🎜🎜#Ringkasan: #🎜🎜##🎜🎜#Di atas ialah beberapa kaedah biasa untuk mengendalikan penyahduplikasian mesej dan mati pucuk mesej dalam PHP dan MySQL. Dalam pembangunan sebenar, kita boleh memilih kaedah yang sesuai mengikut keperluan khusus dan seni bina sistem. Sama ada pemprosesan deduplikasi berasaskan Redis atau pemprosesan idempoten berasaskan MySQL, ia boleh membantu kami memproses mesej dengan lebih baik dalam baris gilir dan meningkatkan kebolehpercayaan dan prestasi sistem. #🎜🎜#

Atas ialah kandungan terperinci Baris gilir penyahduplikasian mesej dan kaedah pemprosesan mati pucuk dalam PHP dan MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popular PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popular Apr 14, 2025 am 12:13 AM

PHP dan Python masing -masing mempunyai kelebihan mereka sendiri, dan memilih mengikut keperluan projek. 1.PHP sesuai untuk pembangunan web, terutamanya untuk pembangunan pesat dan penyelenggaraan laman web. 2. Python sesuai untuk sains data, pembelajaran mesin dan kecerdasan buatan, dengan sintaks ringkas dan sesuai untuk pemula.

Status Semasa PHP: Lihat trend pembangunan web Status Semasa PHP: Lihat trend pembangunan web Apr 13, 2025 am 12:20 AM

PHP tetap penting dalam pembangunan web moden, terutamanya dalam pengurusan kandungan dan platform e-dagang. 1) PHP mempunyai ekosistem yang kaya dan sokongan rangka kerja yang kuat, seperti Laravel dan Symfony. 2) Pengoptimuman prestasi boleh dicapai melalui OPCACHE dan NGINX. 3) Php8.0 memperkenalkan pengkompil JIT untuk meningkatkan prestasi. 4) Aplikasi awan asli dikerahkan melalui Docker dan Kubernet untuk meningkatkan fleksibiliti dan skalabiliti.

Relevannya PHP: Adakah ia masih hidup? Relevannya PHP: Adakah ia masih hidup? Apr 14, 2025 am 12:12 AM

PHP masih dinamik dan masih menduduki kedudukan penting dalam bidang pengaturcaraan moden. 1) kesederhanaan PHP dan sokongan komuniti yang kuat menjadikannya digunakan secara meluas dalam pembangunan web; 2) fleksibiliti dan kestabilannya menjadikannya cemerlang dalam mengendalikan borang web, operasi pangkalan data dan pemprosesan fail; 3) PHP sentiasa berkembang dan mengoptimumkan, sesuai untuk pemula dan pemaju yang berpengalaman.

Tujuan PHP: Membina Laman Web Dinamik Tujuan PHP: Membina Laman Web Dinamik Apr 15, 2025 am 12:18 AM

PHP digunakan untuk membina laman web dinamik, dan fungsi terasnya termasuk: 1. Menjana kandungan dinamik dan menghasilkan laman web secara real time dengan menyambung dengan pangkalan data; 2. Proses Interaksi Pengguna dan Penyerahan Bentuk, Sahkan Input dan Menanggapi Operasi; 3. Menguruskan sesi dan pengesahan pengguna untuk memberikan pengalaman yang diperibadikan; 4. Mengoptimumkan prestasi dan ikuti amalan terbaik untuk meningkatkan kecekapan dan keselamatan laman web.

Cara menyambung ke pangkalan data Apache Cara menyambung ke pangkalan data Apache Apr 13, 2025 pm 01:03 PM

Apache menyambung ke pangkalan data memerlukan langkah -langkah berikut: Pasang pemacu pangkalan data. Konfigurasikan fail web.xml untuk membuat kolam sambungan. Buat sumber data JDBC dan tentukan tetapan sambungan. Gunakan API JDBC untuk mengakses pangkalan data dari kod Java, termasuk mendapatkan sambungan, membuat kenyataan, parameter mengikat, melaksanakan pertanyaan atau kemas kini, dan hasil pemprosesan.

PHP dalam Tindakan: Contoh dan aplikasi dunia nyata PHP dalam Tindakan: Contoh dan aplikasi dunia nyata Apr 14, 2025 am 12:19 AM

PHP digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan pembangunan API. 1) e-dagang: Digunakan untuk fungsi keranjang belanja dan pemprosesan pembayaran. 2) Sistem Pengurusan Kandungan: Digunakan untuk penjanaan kandungan dinamik dan pengurusan pengguna. 3) Pembangunan API: Digunakan untuk Pembangunan API RESTful dan Keselamatan API. Melalui pengoptimuman prestasi dan amalan terbaik, kecekapan dan pemeliharaan aplikasi PHP bertambah baik.

PHP dan Python: Contoh dan perbandingan kod PHP dan Python: Contoh dan perbandingan kod Apr 15, 2025 am 12:07 AM

PHP dan Python mempunyai kelebihan dan kekurangan mereka sendiri, dan pilihannya bergantung kepada keperluan projek dan keutamaan peribadi. 1.PHP sesuai untuk pembangunan pesat dan penyelenggaraan aplikasi web berskala besar. 2. Python menguasai bidang sains data dan pembelajaran mesin.

PHP: Pengendalian pangkalan data dan logik sisi pelayan PHP: Pengendalian pangkalan data dan logik sisi pelayan Apr 15, 2025 am 12:15 AM

PHP menggunakan sambungan MySQLI dan PDO untuk berinteraksi dalam operasi pangkalan data dan pemprosesan logik sisi pelayan, dan memproses logik sisi pelayan melalui fungsi seperti pengurusan sesi. 1) Gunakan MySQLI atau PDO untuk menyambung ke pangkalan data dan laksanakan pertanyaan SQL. 2) Mengendalikan permintaan HTTP dan status pengguna melalui pengurusan sesi dan fungsi lain. 3) Gunakan urus niaga untuk memastikan atomik operasi pangkalan data. 4) Mencegah suntikan SQL, gunakan pengendalian pengecualian dan sambungan penutup untuk debugging. 5) Mengoptimumkan prestasi melalui pengindeksan dan cache, tulis kod yang sangat mudah dibaca dan lakukan pengendalian ralat.

See all articles