Maison  >  Article  >  base de données  >  Comment la file d'attente de messages Redis empêche la perte de données

Comment la file d'attente de messages Redis empêche la perte de données

(*-*)浩
(*-*)浩original
2019-11-26 10:09:408124parcourir

Comment la file d'attente de messages Redis empêche la perte de données

Redis implémente les files d'attente de messages sous deux formes :

Mode d'abonnement de diffusion : basé sur le mécanisme Pub/Sub de Redis, une fois qu'un client passe Publiez un message dans une certaine clé et tous les clients abonnés déclencheront le mode d'abonnement au cluster d'événements : basé sur Redis List bidirectionnel + atomicité + BRPOP (apprentissage recommandé : Tutoriel vidéo Redis)

File d'attente des messages Redis, lorsque Redis tombe en panne, les messages peuvent être perdus (cela dépend aussi de la stratégie de persistance). Si le destinataire du message ne dispose pas d'un mécanisme de renvoi et de vérification, les données dans Redis seront perdues. Ainsi, utiliser Redis comme file d'attente de messages est généralement un scénario dans lequel la précision du message n'est pas particulièrement élevée.

Si vous garantissez absolument la cohérence finale des données et assurez-vous que le message n'est pas perdu à 100%, alors il vous faut :

1.Obligatoire lors de l'écriture Activer le traitement des transactions pour garantir une écriture réussie.

2. Redis est configuré de sorte que toutes les modifications doivent être conservées en temps réel. Par exemple, si l'extrémité de stockage est un disque, chaque modification sera écrite sur le disque de manière synchrone avant celle-ci. est terminé. Redis prend en charge la configuration de cette manière, mais cela fera disparaître complètement sa fonctionnalité de base de données en mémoire et ses performances deviendront très faibles.

3. Le côté consommateur doit également mettre en œuvre une méthode de transaction. Une fois le traitement terminé, il reviendra pour supprimer réellement le message.

4. Le traitement simultané de plusieurs threads ou de plusieurs terminaux en même temps peut être évité par le verrouillage.

Les exigences de 3 et 4 doivent être implémentées par vous-même. Vous pouvez les considérer ensemble. Vous pouvez également utiliser une autre file d'attente pour les implémenter, mais une meilleure façon est d'implémenter un compteur à l'intérieur de la file d'attente. . Pour le format de hachage, ajoutez un champ et ajoutez une valeur. Pour la liste, ajoutez d'abord une valeur pour la baser. Si vous ajoutez une valeur et un séparateur en tête de chaîne, vous pouvez créer un compteur simple. est assez pratique.

Sauf pour des systèmes spécifiques, une telle cohérence n'est généralement pas requise. Elle n'est pas difficile à mettre en œuvre, mais les performances seront très médiocres.

Les entreprises de paiement de type bancaire exigent une cohérence stricte des transactions, tandis que les entreprises de type Internet utilisent généralement une approche délicate qui peut tolérer une petite quantité de perte de données sur une très courte période de temps en échange de performances supérieures.

Par exemple, le traitement Redis ci-dessus peut être modifié pour réellement écrire sur le disque lorsque 1 000 données changent. Dans des cas extrêmes, comme une coupure de courant soudaine, il existe un risque de perdre ces 1 000 données. Bien sûr, la probabilité que cela se produise est également très faible (restez à l’écart de la pelle Lanxiang ?), elle est donc acceptable dans la plupart des scénarios.

Pour plus d'articles techniques liés à Redis, veuillez visiter la colonne Tutoriel de démarrage de Redis pour apprendre !

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Comment persister RedisArticle suivant:Comment persister Redis