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+消息队列删除缓存

浙公网安备 33010602011771号