当在某个时刻大面积的key失效,此时会有大量的请求打在DB上面,造成DB的CPU和内存负载过高,甚至宕机
- 预防雪崩
- 对每个key的失效时间加一个随机值,保证数据库不会在同一时间大面积失效
- 设置热点数据不设置过期时间,有更新操作时对缓存进行更新就好了
- redis宕机引起的雪崩
- 采用集群缓存,保证缓存服务的高可用。这种方案就是在发生雪崩前对缓存集群实现高可用,如果是使用 Redis,可以使用 主从+哨兵 ,Redis Cluster 来避免 Redis 全盘崩溃的情况
- 开启Redis持久化机制,尽快恢复缓存集群。一旦重启,就能从磁盘上自动加载数据恢复内存中的数据。
- 防止MySQL不挂
- ehcache本地缓存 + Hystrix限流&降级,避免MySQL被打死
在某时刻的某个热点key失效,且有大量的请求对该key进行访问,导致请求全落在DB上,造成DB的CPU和内存负载过高,甚至宕机
- 设置热点数据永远不过期
- 互斥锁。第一个查询数据的请求上使用一个 互斥锁来锁住它。其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存。后面的线程进来发现已经有缓存了,就直接走缓存。
用户不断请求不存在于Redis和数据库中的数据
- 接口层增加校验。减少不合法请求
- 缓存空值
- 布隆过滤器
- 对单个IP每秒访问次数超出阈值的IP都拉黑