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.
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 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!