| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 
 | 缓存不一致先删除缓存,再更新数据库
 问题: A 删除缓存后,更新 db 前,B 查询数据,缓存中没有到 db 中读到了旧数据,将旧数据设置到了缓存中
 解决:在 A 更新完数据库值以后,让它先 sleep 一小段时间,再进行一次缓存删除操作。(延迟双删)
 先更新数据库值,再删除缓存值
 问题:A 更新完 db 还没删除缓存前,B 查询数据命中就缓存,获取到旧数据,这个问题无解,但对业务影响较小。
 推荐这种方式
 先删除缓存值再更新数据库,有可能导致请求因缓存缺失而访问数据库,给数据库带来压力
 如果业务应用中读取数据库和写缓存的时间不好估算,那么,延迟双删中的等待时间就不好设置。
 
 缓存血崩
 原因
 大量数据同时过期
 缓存实例宕机
 应对方案
 给过期时间加随机数
 服务降级、熔断、限流
 主从集群
 
 缓存击穿
 原因:热点数据过期
 应对方案
 不给热点数据设置过期时间
 将数据提升为本地缓存
 
 缓存穿透
 原因:缓存和数据库中都没有要访问的数据
 误删数据
 恶意攻击
 应对方案
 缓存空值或缺省值
 使用布隆过滤器
 前端合法性检查
 
 |