Redis详解(十二)—— 缓存穿透、缓存击穿、缓存雪崩

缓存穿透

缓存和数据库中都没有的数据,可用户还是源源不断的发起请求,导致每次请求都会到数据库,从而压垮数据库。

解决方式:

  1. 业务层校验: 对于参数明显错误的直接拒绝;
  2. 查询不存在数据设置短时间过期;
  3. 布隆过滤器;

缓存击穿

Redis中一个热点key在失效的同时,大量的请求过来,从而会全部到达数据库,压垮数据库。

解决方式:

  1. 热点key 永不过期;
  2. 定时更新;热点key过期时间1h,设置59分钟时进行更新;
  3. 互斥锁

缓存雪崩

Redis中缓存的数据大面积同时失效,或者Redis宕机,从而会导致大量请求直接到数据库,压垮数据库。

解决方式:

  1. 单机环境,防止redis宕机可使用redis集群(哨兵、集群);
  2. 设置key过期时间的有效均匀分布;
  3. 数据预热,提前将可能使用数据保存缓存中;