Skip to content

缓存预热/雪崩/穿透/击穿

1. 缓存预热

@PostConstruct初始化白名单数据

2. 缓存雪崩

  1. redis主机挂了,Redis全盘崩溃,偏硬件运维
  2. redis中有大量key同时过期大面积失效,偏软件开发

2.1 预防+解决

  1. redis缓存集群实现高可用:
  2. 多缓存结合预防雪崩:ehcache本地缓存+redis缓存
  3. 服务降级: Hystrix或者阿里sentinel限流&降级
  4. 使用阿里云-云数据库Redis版

3. 缓存穿透

请求去查询一条记录,先查redis无,后查mysql无,都查询不到该条记录但是请求每次都会打到数据库上面去,导致后台数据库压力暴增这种现象我们称为缓存穿透,这个redis变成了一个摆设。。

3.1 预防解决

  1. mysql也查不到的话也让redis存入刚刚查不到的key并保护mysql。由于存在空对象缓存和缓存回写(看自己业务不限死)redis中的无关紧要的key也会越写越多(记得设置redis过期时间)
  2. Google布隆过滤器Guava解决缓存穿透

4. 缓存击穿

大量的请求同时查询一个key时,此时这个key正好失效了,就会导致大量的请求都打到数据库上面去。会造成某一时刻数据库请求量过大,压力剧增。

4.1 预防+解决

方案1:差异失效时间,对于访问频繁的热点key,干脆就不设置过期时间 方案2:互斥更新,采用双检加锁策略 Alt text