redis和mysql数据保持一致(Cache-Aside)

1.Cache-Aside模式(旁路缓存模式)下的DB和cache缓存五大策略:

1.1 先更新update DB、再更新Cache

A、B两个线程操作:

step1:A线程 update DB

step2:B线程 update DB

step3:B线程 update Cache

step4:A线程 update Cache

导致的问题就是Cache中的数据和DB中的数据不一致。

1.2先删除Cache、再更新DB

A、B两个线程操作

step1:A线程 delete Cache

step2:B线程 load Cache

step3:A线程update DB

导致的问题就是Cache中的数据和DB中的数据不一致。

1.3先update DB再delete Cache

A、B两个线程操作

step1:A线程update DB

step2:B线程find Cache

step3:A线程delete cache

(1)在A线程update DB和delete Cache之间会出现数据不一致

(2)如果delete cache失败,会存在较长数据不一致直到cache过期。

1.4延迟双删策略

基于1.2先delete Cache,再update DB,然后延迟一段时间再delete cache

A、B两个线程

step1:A线程delete Cache

step2:B线程 update Cache

step3:A线程update DB

step4:A线程delete Cache

(1)delete Cache和 update DB会出现较短时间不一致

(2)如果操作频繁。redis会有一定压力

(3)极端情况下step4操作失败会退化到1.2

1.5先update DB再基于队列delete Cache

基于1.3,先update DB,然后把delete Cache操作交给队列操作。

队列操作有三种方式:

(1)基于内存队列删除

(2)基于消息队列删除

(3)基于binlog+消息队列删除缓存

 

参考博文:http://www.huazhaox.com/article/13223

posted @ 2023-03-08 15:44  老王的日常  阅读(107)  评论(0)    收藏  举报