Maison >développement back-end >tutoriel php >Application de la technologie de file d'attente à la déduplication des messages et à l'idempotence des messages en PHP et MySQL
Application de la technologie de file d'attente dans la déduplication et l'idempotence des messages en PHP et MySQL
Résumé : Avec le développement continu des applications Internet, les files d'attente de messages sont devenues l'un des outils importants pour gérer les opérations à haute concurrence et asynchrones. En PHP et MySQL, comment utiliser les files d'attente pour résoudre les problèmes de déduplication des messages et d'idempotence des messages ? Cet article présentera des exemples de code spécifiques utilisant Redis et MySQL pour implémenter ces deux fonctions.
L'exemple de code est le suivant :
// 连接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; }
Dans le code ci-dessus, nous utilisons les méthodes sismember et sadd de Redis pour déterminer si le message a été traité. Si le message existe déjà dans la collection Redis Processed_messages, cela signifie que le message a été traité et false sera renvoyé directement. Sinon, traitez le message et ajoutez-le à la collection.
L'exemple de code est le suivant :
CREATE TABLE messages ( id INT AUTO_INCREMENT PRIMARY KEY, message VARCHAR(255) NOT NULL UNIQUE KEY message_index (message) );
Dans le code ci-dessus, nous créons une table de messages, dans laquelle le champ de message définit un index unique via UNIQUE KEY. Ensuite, avant d'insérer le message, nous devons déterminer si le message existe déjà.
L'exemple de code est le suivant :
// 连接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); }
Dans le code ci-dessus, nous utilisons la méthode real_escape_string de mysqli pour échapper au message et empêcher les attaques par injection SQL. Ensuite, nous interrogeons la table des messages pour déterminer si le message existe déjà. Si le nombre de lignes dans le jeu de résultats est supérieur à 0, cela signifie que le message existe déjà et peut être renvoyé directement. Sinon, traitez le message et insérez-le dans le tableau.
Matériaux de référence :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!