Avec le développement rapide des applications Internet, la technologie de file d'attente de messages est devenue l'un des outils de base pour gérer des opérations élevées de concurrence et asynchrones. Cet article introduira comment réaliser la déduplication des messages et l'identification des messages via Redis et MySQL pour assurer l'efficacité et la fiabilité du système.
La file d'attente de messages est un mécanisme pour passer des messages entre les applications, ce qui peut efficacement améliorer l'évolutivité et la fiabilité du système. Cependant, des messages en double peuvent apparaître dans la file d'attente, ce qui peut entraîner la répétition de certaines opérations, provoquant une confusion ou une incohérence des données. Pour éviter cela, nous pouvons utiliser la structure de données définis de Redis pour déduir les messages.
Nous pouvons utiliser les méthodes de Sisme et SADD de Redis pour juger et supprimer des messages en double. Voici le code PHP implémenté:
// connecterRedis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// Répétez la nouvelle
function deduplicate($message) {
if ($redis->sismember('processed_messages', $message)) {
return false; // Messages traités,Plus de traitement
}
// Logique pour le traitement des messages...
$redis->sadd('processed_messages', $message);
return true;
}
Dans le code ci-dessus, nous vérifions si le message existe déjà dans la collection "Proced_Messages" de Redis, et renvoie Faux si le message existe déjà, sinon traitez et ajoutez-le à la collection.
Dans les systèmes distribués, les messages peuvent être consommés à plusieurs reprises pour des raisons de réseau, ce qui entraîne le traitement du même message plusieurs fois, affectant la stabilité du système et la cohérence des données. Pour résoudre ce problème, nous pouvons réaliser idempotence des messages via des index uniques dans MySQL, c'est-à-dire que l'effet du traitement du même message est cohérent plusieurs fois.
Tout d'abord, nous devons créer une table dans MySQL et définir un index unique pour le champ de messages pour empêcher l'insertion en double. Voici le code SQL pour créer le tableau:
CREATE TABLE messages (
id INT AUTO_INCREMENT PRIMARY KEY,
message VARCHAR(255) NOT NULL,
UNIQUE KEY message_index (message)
);
Dans ce code, nous créons un index unique pour le champ Message pour nous assurer que chaque message ne peut être inséré qu'une seule fois.
Ensuite, nous devons vérifier si le message existe déjà dans la base de données avant de l'insérer, en évitant le traitement en double. Voici un exemple de code PHP:
// connecterMySQL
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
// Traitement d'impuissance des messages
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; // Le message existe déjà,Plus de traitement
}
// Logique pour le traitement des messages...
$insert_query = "INSERT INTO messages (message) VALUES ('$escaped_message')";
$mysqli->query($insert_query);
}
Dans ce code, nous utilisons la méthode Real_escape_string de MySQLI pour empêcher l'injection SQL, demandez-vous si le message existe, sautez l'insertion s'il existe, sinon traiter et insérer de nouveaux messages.
En combinant Redis et MySQL, la technologie de file d'attente peut résoudre efficacement le problème de la déduplication des messages et de l'identification des messages dans PHP et MySQL. La mise en œuvre de la déduplication des messages peut non seulement empêcher le traitement des messages en double et améliorer les performances du système, mais également garantir la stabilité du système et la cohérence des données grâce au traitement d'idémpotence. Dans les applications pratiques, le processus de traitement des messages peut être encore optimisé en fonction des besoins de l'entreprise et la fiabilité du système peut être améliorée.
Étiquettes associées:
MySQL