缓存预热/雪崩/穿透/击穿
1. 缓存预热
@PostConstruct初始化白名单数据
2. 缓存雪崩
- redis主机挂了,Redis全盘崩溃,偏硬件运维
- redis中有大量key同时过期大面积失效,偏软件开发
2.1 预防+解决
- redis缓存集群实现高可用:
- 多缓存结合预防雪崩:ehcache本地缓存+redis缓存
- 服务降级: Hystrix或者阿里sentinel限流&降级
- 使用阿里云-云数据库Redis版
3. 缓存穿透
请求去查询一条记录,先查redis无,后查mysql无,都查询不到该条记录但是请求每次都会打到数据库上面去,导致后台数据库压力暴增这种现象我们称为缓存穿透,这个redis变成了一个摆设。。
3.1 预防解决
- mysql也查不到的话也让redis存入刚刚查不到的key并保护mysql。由于存在空对象缓存和缓存回写(看自己业务不限死)redis中的无关紧要的key也会越写越多(记得设置redis过期时间)
- Google布隆过滤器Guava解决缓存穿透
4. 缓存击穿
大量的请求同时查询一个key时,此时这个key正好失效了,就会导致大量的请求都打到数据库上面去。会造成某一时刻数据库请求量过大,压力剧增。
4.1 预防+解决
方案1:差异失效时间,对于访问频繁的热点key,干脆就不设置过期时间 方案2:互斥更新,采用双检加锁策略