双写一致性
即,缓存和数据库的数据保持一致
结合查询的资料简单的对双写进行分析总结。
1 先更新缓存,后更新数据库
不推荐。
产生的问题:缓存一般不支持事务回滚,或设计回滚代价较高,当更新数据库遇错回滚,缓存无法进行相同的操作。
2 先更新数据库,后更新缓存
不推荐。
产生的问题:线程A、线程B修改数据库,由于网络原因,B先于A修改了缓存,导致数据库与缓存不一致。
3 先删缓存,后更新数据库
不推荐。
一般情况下,数据库的写操作要慢于读操作
产生的问题:线程A删缓存,线程B读缓存时无数据,查数据库,
线程A修改数据库,线程B将旧值缓存,此时数据库与缓存不一致。
先删缓存,后更新数据库,再删缓存
不推荐。
高并发下
产生问题:线程A删缓存,线程B读缓存时无数据,查数据库,线程A修改数据库,删除缓存,
线程B将旧值缓存。
先删缓存,后更新数据库,延时,再删缓存 (延时双删)
可用, 过程:线程A删缓存,线程B读缓存时无数据,查数据库,线程A修改数据库,延时一定时间,在这段时间内
线程B将旧值缓存,线程A删除缓存。要合理控制延时时间。
4 先更新数据库,后删除缓存
推荐。
可能出现的问题:缓存失效,线程B查库获取旧值,线程A修改数据库,线程A删缓存,线程B缓存旧值。
仍然可以使用延时双删解决可能出现的问题。