redis读书笔记
缓存和DB不一致
一般更新DB、更新缓存方案存在写写并发造成数据不一致的风险(并发时两个线程更新DB、更新缓存顺序不一致)。实际中一般是更新DB、删除缓存的方案。后者也可能存在下面问题。
- 更新DB成功,删除缓存失败造成数据不一致。可以通过重试解决
- 删除缓存成功、更新DB失败,一般短暂影响数据不一致。也可以通过重试解决
- 删除缓存成功,更新DB成功,多线程时存在数据不一致。需要延迟双删方案
- 更新DB成功,删除缓存成功。等待缓存删除短暂期间有数据不一致风险
缓存雪崩
大多数缓存key同时过期,造成查询全部到DB层。需要优化过期时间的设置,比如加入随机值
缓存击穿
热点key过期时,查询压力全部到内存。解法方法是热点key不过期,更新DB时更新redis(写DB写缓存并发有数据不一致风险)
缓存穿透
这个场景主要是考虑DB中key也不存在时。一般是外部攻击或者程序设计不当。可以考虑加入默认null key或者布隆过滤器解决