美文网首页
redis缓存穿透和雪崩

redis缓存穿透和雪崩

作者: 爱读书的夏夏 | 来源:发表于2020-02-18 11:13 被阅读0次

    缓存雪崩

    定义

    缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期,或者缓存宕机),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。

    一般主站不会直接查库,而是调用第三方http、dubbo接口。这同样会对下游造成影响。

    解决方案

    事前:

    缓存高可用,解决宕机导致雪崩
    一般的缓存都是定时任务刷进去的,定时任务的执行时间间隔需小于缓存过期时间

    事中:

    请求限流,防止DB打挂或者下游系统被打挂

    事后:

    尽快恢复缓存:redis恢复加载持久化数据、执行定时任务恢复热点数据

    缓存穿透

    定义

    正常情况下,我们去查询数据都是存在。那么请求去查询一条压根儿数据库中根本就不存在的数据,也就是缓存和数据库都查询不到这条数据,但是请求每次都会打到数据库上面去。这种查询不存在数据的现象我们称为缓存穿透。

    解决方案

    缓存空值

    在数据库中查不到时,先缓存空值,但是过期时间可以设置的稍微短一些。及时更新。

    BloomFilter

    可以在查询缓存前取BloomFilter查询key是否存在,如果不存在直接返回,存在再去查找缓存→DB (单机guava BloomFilter,分布式使用redis bitmap实现BloomFilter)

    相关文章

      网友评论

          本文标题:redis缓存穿透和雪崩

          本文链接:https://www.haomeiwen.com/subject/ugxgfhtx.html