数据库与缓存更新一致性四种策略

时间:2024-03-04 11:43:09
更新策略 存在问题
先更新数据库,再更新缓存

1、更新缓存的时候失败了(或者更新的时候晚了被其他线程读取到的还是旧值),导致缓存中存的一直都是脏数据;

2、多个线程在更新时,因为两个更新步骤执行顺序不一致,可能会导致数据错乱

先更新缓存,再更新数据库

1、不太推荐,业务上一般把mysql最后保障

2、多线程环境下,A、B两个线程有快有慢,最后可能导致缓存与数据库不一致;

先删除缓存,再更新数据库

1、多线程下,A还没更新完数据库;B进来查缓存没查到,就会读取数据库的旧值写入缓存(延迟双删:可以等一会再删除一遍缓存)

2、删了缓存假如这个时候流量激增查询这个key,会导致缓存击穿数据库

先更新数据库,再删除缓存(推荐 假如删除失败或者来不及,就会被其他线程读取到旧值(存在一定时间数据不一致但是会保证最终一致性)

1、先更新数据库,再更新缓存

2、先更新缓存,再更新数据库

3、先删除缓存,再更新数据库

 

 

 

4、先更新数据库,再删除缓存(推荐

参考canal原理: 

 

 总结:

参考:尚硅谷Redis7课程笔记