Maison >base de données >Redis >Que signifie la double suppression retardée du cache Redis ?

Que signifie la double suppression retardée du cache Redis ?

王林
王林avant
2023-05-26 15:49:513162parcourir

Pourquoi le cache est-il supprimé au lieu d'être mis à jour ?

Lors de la mise à jour des données, vous pouvez rencontrer des problèmes de transactions distribuées, entraînant la réussite des mises à jour du cache mais l'échec des modifications de la base de données. Même si la modification de la base de données échoue et que seul le cache est supprimé, la requête suivante obtiendra toujours les données directement de la base de données et aucune donnée sale ne sera générée.

Qu'est-ce que la double suppression différée ?

C'est-à-dire que lors de l'ajout, de la suppression ou de la modification d'une classe d'entité, le cache de la classe d'entité doit être vidé. La position d'effacement est avant et après la méthode de fonctionnement de la base de données.

Adoptez la méthode de preuve par contradiction

Supprimez uniquement en premier

Que signifie la double suppression retardée du cache Redis ?

Supprimez uniquement plus tard

Que signifie la double suppression retardée du cache Redis ?

Conclusion

Ainsi, nous pouvons conclure qu'il existe des problèmes à la fois avec la pré-suppression et la post-suppression. La stratégie de double suppression retardée est donc adoptée

Pensée 2 : Pourquoi est-elle retardée

C'est encore une preuve par contradiction. La situation dans la figure ci-dessous montre la situation dans laquelle l'ancien cache existe toujours après une double suppression. Le délai consiste à garantir que les opérations de changement de cache des autres transactions sont terminées avant de modifier la base de données -> vider le cache.

Que signifie la double suppression retardée du cache Redis ?

Supplémentaire : Pourquoi devrions-nous retarder la double suppression pour garantir la cohérence du cache

Pourquoi devrions-nous retarder la double suppression pour garantir la cohérence du cache

  • Avant de modifier les données de la base de données, Redis doit d'abord être supprimé : c'est pour garantir que pendant l'intervalle entre la modification des données de la base de données et la suppression des données redis, en cas d'impact, il est garanti que ces données n'existent pas dans redis. Si aucune opération de suppression n'est effectuée, les anciennes données peuvent toujours être lues à partir de Redis après la modification des données de la base de données, ce qui entraînera une incohérence des données.

  • La deuxième suppression a lieu après la modification des données de la base de données. À ce stade, les données correspondantes dans redis doivent être à nouveau supprimées. Cette fois, il s'agit de supprimer les données entre la première suppression de redis et la modification des données de la base de données. S'il y a une demande, alors les anciennes données seront à nouveau mises en cache dans Redis, mais les données de la base de données seront ensuite modifiées. Si elles n'étaient pas supprimées cette fois, les anciennes données de la base de données existeraient dans Redis.

  • Alors pourquoi devez-vous retarder la suppression de Redis pendant un certain temps après la deuxième modification de la base de données ?

  • Afin d'attendre la lecture précédente de la base de données, attendez que les données soient écrites dans le cache, et enfin supprimez les données sales, c'est donc le moment où les données sont envoyées de la base de données vers le serveur + écriture du cache

Que signifie la double suppression retardée du cache Redis ?

Cependant, le délai de double suppression retardée est très difficile à déterminer, donc la double suppression retardée n'est pas recommandée

Selon des considérations globales, même si la base de données est d'abord modifiée, après la suppression le cache, il y aura une certaine période de temps pendant laquelle les anciennes données seront lues. Ceci est généralement toléré.

Tant que le cache est supprimé à temps, les autres threads peuvent lire la dernière valeur.

Dans le même temps, afin de garantir que le cache sera supprimé, vous pouvez utiliser mq pour garantir que le cache sera supprimé

Si le message n'est pas consommé à plusieurs reprises dans mq, il sera transmis à d'autres. consommateurs pour la consommation (le cache sera supprimé)

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer