Maison > base de données > Redis > Assurer la cohérence des doubles écritures entre MySQL et Redis

Assurer la cohérence des doubles écritures entre MySQL et Redis

远方*
Libérer: 2022-01-26 11:15:29
original
2734 Les gens l'ont consulté

1. Scénario :

La cohérence en double écriture signifie que lorsque nous mettons à jour les données dans la base de données, les données dans Redis doivent également être mises à jour de manière synchrone. Le processus de lecture des données à l'aide de redis Lorsque l'utilisateur accède aux données, les données seront d'abord lues à partir du cache. Si le cache est atteint, les données dans le cache seront directement renvoyées à l'utilisateur. le cache, la base de données sera d'abord interrogée et enregistrera les données interrogées dans le cache, puis les renverra à l'utilisateur.

Assurer la cohérence des doubles écritures entre MySQL et Redis

2. Stratégie pour assurer la cohérence de la double écriture

1 Mettez d'abord à jour le cache, puis mettez à jour la base de données

2 Mettez d'abord à jour la base de données, puis mettez à jour le cache

3. mettre à jour la base de données

4, Mettez d'abord à jour la base de données, puis supprimez le cache

Troisièmement, les avantages et les inconvénients des quatre stratégies

1. Mettez d'abord à jour le cache, puis mettez à jour la base de données

Le problème est évident. Si la mise à jour du cache réussit mais que la mise à jour de la base de données échoue, le cache sera endommagé. Données sales

2 Mettez d'abord à jour la base de données, puis mettez à jour le cache

Si la concurrence est élevée, la situation suivante peut exister. Le thread A a mis à jour la base de données. Si le thread A n'a pas mis à jour la base de données pour des raisons de réseau ou pour d'autres raisons, il est encore temps de mettre à jour le cache. À ce stade, un processus B met à jour la base de données et met à jour le cache. processus A met à jour le cache. À ce moment-là, la mise à jour du cache par le thread B sera perdue, comme dans une situation de perte de transaction

3 Supprimez d'abord le cache, puis mettez à jour la base de données

Cette stratégie a peut-être évité la perte de cache. dans la stratégie 2, mais quel que soit le niveau de concurrence, il y aura des incohérences. Par exemple, le thread A effectue une opération d'écriture. Tout d'abord, supprimez le cache et préparez-vous à mettre à jour la base de données. et n'atteint pas le cache. Ensuite, il interroge la base de données. À ce moment-là, il lit l'ancienne valeur et enregistre l'ancienne valeur interrogée dans le cache. Puis le thread A Une fois la mise à jour de la base de données terminée, la base de données et le cache sont à nouveau incohérents. Solution : Il suffit de re-threader A. Après avoir terminé la mise à jour de la base de données, supprimez à nouveau le cache avec un léger retard, également appelé double suppression retardée. Le temps de retard doit ici être supérieur au temps d'une opération de lecture de l'entreprise.

4. Mettez d'abord à jour la base de données, puis supprimez le cache

Peu importe le niveau de concurrence, il y aura des incohérences. Par exemple, le thread A lit des données et lorsqu'il se prépare à écrire dans le cache, le thread B met à jour La base de données est accédée, puis le cache est supprimé. À ce moment, le thread A écrit l'ancienne valeur dans le cache, bien que la probabilité que cela se produise soit relativement faible, car l'opération d'écriture prend plus de temps qu'une opération de lecture. Solution : Double suppression retardée La double suppression retardée est toujours un problème. Que dois-je faire si la suppression du cache échoue. Bien sûr, supprimez-le à nouveau et continuez la suppression en boucle ? Après l'échec de la suppression, nous pouvons mettre la clé à supprimer dans la file d'attente, puis essayer de la supprimer à plusieurs reprises jusqu'à ce que la suppression réussisse.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal