缓存和数据库的数据一致问题笔记
数据库与redis 数据不一致问题 参考 25 | 缓存异常(上):如何解决缓存和数据库的数据不一致问题? (geekbang.org)
1.先删除缓存再更新或删除数据库,如果删除数据库失败,其他线程读取到数据库的旧值,我觉得不应该叫旧值,都没有更新成功,数据库事务应该要回滚,这次业务应该算失败。对业务没有影响。
2.先删除缓存再更新数据库的并发场景,需要延迟双删。延迟这个时间不好控制,也会出现早删除,也会造成数据不一致。
3.先更新数据库,再删除缓存,需要保持原子性,可以采用队列来保持最终一致性。
4.先更新数据库,后删除缓存,会出现并发读,数据库已经更新但缓存更新,可以采用将读写操作写到队列,队列来保证操作的有序性,需要考虑性能。
5.对于有并发读写请求,有两个思路,分布式锁来限制并发。或者采用redis读写,mysql只做备份,保持最终一致性。这需要考虑redis的高可用。