La cohérence en double écriture signifie qu'après avoir mis à 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.
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
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 met à 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. mettre à jour le cache. À ce stade, la mise à jour du thread B vers le cache sera perdue, comme 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 situation de perte de cache dans. 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. n'atteint pas le cache. Ensuite, il interroge la base de données, lit l'ancienne valeur et enregistre l'ancienne valeur interrogée dans le cache. Ensuite, le thread A est terminé. La base de données et le cache sont à nouveau incohérents. : 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
Même dans des situations de concurrence élevée, il y aura des incohérences. Par exemple, lorsque le thread A lit des données et se prépare à écrire dans le cache, le thread B est mis à jour. La base de données est accédée, puis le cache est supprimé. À ce moment-là, 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. Comme alternative, les mots originaux peuvent être simplifiés et restructurés : Pour gérer les échecs de suppression, il est recommandé d’adopter une solution de double suppression retardée. Même s'il existe toujours des problèmes de double suppression retardée, l'opération de suppression peut être répétée jusqu'à ce que le cache soit complètement vidé. Si la suppression échoue, nous pouvons mettre les clés à supprimer dans la file d'attente et essayer de les supprimer encore et encore 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!