redis缓存与数据库一致性问题解决
更多干货
一、需求起因
假设先写数据库,再淘汰缓存:第一步写数据库操作成功,第二步淘汰缓存失败,则会出现DB中是新数据,Cache中是旧数据,数据不一致【db中是新数据,cache中是旧数据】。
假设先淘汰缓存,再写数据库:第一步淘汰缓存成功,第二步写数据库失败【cache中无数据,db中是旧数据】。
结论:先淘汰缓存,再写数据库。
二、数据不一致原因
先操作缓存,在写数据库成功之前,如果有读请求发生,可能导致旧数据入缓存,引发数据不一致。
写流程:
- 1)先淘汰cache
- 2)再写db
读流程:
- 1)先读cache,如果数据命中hit则返回
- 2)如果数据未命中miss则读db
- 3