Redis雪崩,击穿,穿透

雪崩

什么是雪崩

当在某个时刻大面积的key失效,此时会有大量的请求打在DB上面,造成DB的CPU和内存负载过高,甚至宕机

怎么处理雪崩
  1. 预防雪崩
    • 对每个key的失效时间加一个随机值,保证数据库不会在同一时间大面积失效
    • 设置热点数据不设置过期时间,有更新操作时对缓存进行更新就好了
  2. redis宕机引起的雪崩
    • 采用集群缓存,保证缓存服务的高可用。这种方案就是在发生雪崩前对缓存集群实现高可用,如果是使用 Redis,可以使用 主从+哨兵 ,Redis Cluster 来避免 Redis 全盘崩溃的情况
    • 开启Redis持久化机制,尽快恢复缓存集群。一旦重启,就能从磁盘上自动加载数据恢复内存中的数据。
  3. 防止MySQL不挂
    • ehcache本地缓存 + Hystrix限流&降级,避免MySQL被打死

击穿

什么的击穿

在某时刻的某个热点key失效,且有大量的请求对该key进行访问,导致请求全落在DB上,造成DB的CPU和内存负载过高,甚至宕机

怎么处理击穿
  1. 设置热点数据永远不过期
  2. 互斥锁。第一个查询数据的请求上使用一个 互斥锁来锁住它。其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存。后面的线程进来发现已经有缓存了,就直接走缓存。

穿透

用户不断请求不存在于Redis和数据库中的数据

怎么处理穿透
  1. 接口层增加校验。减少不合法请求
  2. 缓存空值
  3. 布隆过滤器
  4. 对单个IP每秒访问次数超出阈值的IP都拉黑
posted @ 2021-07-16 18:23  一念错·误终生  阅读(78)  评论(0)    收藏  举报