zoukankan      html  css  js  c++  java
  • Redis缓存雪崩/缓存击穿/缓存穿透

    一、缓存雪崩:所有请求都到了数据库了,造成DB故障,从而引起所有应用服务器故障

    1. 缓存挂了或者缓存服务器重启

    2. 手动把所有缓存都删除了(flushall)

    3. 缓存没有挂,但预加载的key同时到期,或者集中在某一段时间过期

    二、缓存雪崩的解决方法

    1. 缓存挂了的情况

    a. 事发前:实现redis的高可用性(主从+sentinal+cluster)

    b. 事发时:本地内存缓存(二级缓存)+限流(hystrix)

    c. 事发后:Redis持久化,重启后从磁盘上加载数据,快速恢复

    2. 缓存没挂的情况

    预加载时,key的过期时间为随机值,防止同时过期

    三、缓存穿透

    1. 查询一个不存在的数据,由于没有从数据库里查到,就不放入缓存,所以不存在的数据每次都要到数据库里查询

    2. 请求的数据在缓存里大量不命中,导致请求到了数据库,就叫缓存穿透

    四、缓存穿透的解决方法

    1. 校验参数,对一定不存在的key进行过滤

    2. 把空对象也放入缓存,并设置一个较短的过期时间

    3. 布隆过滤器

    五、缓存击穿

    大量请求查询某个key,一直到这个key过期,此时大量请求会落到数据库

    六、缓存击穿的解决方法

    1. 为单独的key加锁

    2. 热点数据永不过期

  • 相关阅读:
    《鱼嘤嘤小分队》第一次作业:项目选题
    第一次博客作业
    csp 201709-2 优先队列模拟
    csp 201403-2
    csp 201809-2 买菜
    JavaScript中伪协议
    修改placeholder的样式
    jQuery对象与DOM对象之间的转换方法
    a的样式
    Guid.NewGuid() 和 new Guid()的区别
  • 原文地址:https://www.cnblogs.com/june0816/p/11463036.html
Copyright © 2011-2022 走看看