1 2 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 查询数据命中就缓存,获取到旧数据,这个问题无解,但对业务影响较小。 推荐这种方式 先删除缓存值再更新数据库,有可能导致请求因缓存缺失而访问数据库,给数据库带来压力 如果业务应用中读取数据库和写缓存的时间不好估算,那么,延迟双删中的等待时间就不好设置。
缓存血崩 原因 大量数据同时过期 缓存实例宕机 应对方案 给过期时间加随机数 服务降级、熔断、限流 主从集群
缓存击穿 原因:热点数据过期 应对方案 不给热点数据设置过期时间 将数据提升为本地缓存
缓存穿透 原因:缓存和数据库中都没有要访问的数据 误删数据 恶意攻击 应对方案 缓存空值或缺省值 使用布隆过滤器 前端合法性检查
|