天天看点

中间件redis--缓存雪崩、缓存穿透、缓存击穿

缓存雪崩

指的是大量的redis key在同一时间点失效,这时有大量的请求进来,操作直接怼到数据库以至于数据库压力过大甚至崩了

解决方案:

  1. 对于每个key设置随机的过期时间,防止同时过期
  2. 对于热点数据,设置key不过期

缓存穿透

指的是外部大量请求redis以及数据库都不存在的key,如果redis对于不存在value的key不缓存,则每次都请求数据库,如果请求量大的话可能造成数据库崩了

  1. 对于数据库不存在值得key,可以先缓存到redis中即key-null并且设置过期时间
  2. 网关层面做用户鉴权、限流等校验
  3. 定义规则的key,对于不规则的key进行过滤

缓存击穿

指的是某个热点key由于缓存时间到期或者被人误删除导致缓存失效,这时候有大量请求获取这个key,造成数据库压力过大崩了

  1. 热点key不设置过期时间
  2. 读取数据库加上互斥锁
  3. 使用布隆过滤器

布隆过滤器简单介绍(Bloom Filter):

利用高效的算法快速判断某个key是否存在集合中(判断也不是特别精准,会存在误差,当判断该key不存在时,就肯定不存在;当判断该key存在时也有可能不存在),当发生缓存击穿时,布隆过滤器会有效减少数据库的压力