缓存雪崩
指的是大量的redis key在同一时间点失效,这时有大量的请求进来,操作直接怼到数据库以至于数据库压力过大甚至崩了
解决方案:
- 对于每个key设置随机的过期时间,防止同时过期
- 对于热点数据,设置key不过期
缓存穿透
指的是外部大量请求redis以及数据库都不存在的key,如果redis对于不存在value的key不缓存,则每次都请求数据库,如果请求量大的话可能造成数据库崩了
解决方案:
- 对于数据库不存在值得key,可以先缓存到redis中即key-null并且设置过期时间
- 网关层面做用户鉴权、限流等校验
- 定义规则的key,对于不规则的key进行过滤
缓存击穿
指的是某个热点key由于缓存时间到期或者被人误删除导致缓存失效,这时候有大量请求获取这个key,造成数据库压力过大崩了
解决方案:
- 热点key不设置过期时间
- 读取数据库加上互斥锁
- 使用布隆过滤器
布隆过滤器简单介绍(Bloom Filter):
利用高效的算法快速判断某个key是否存在集合中(判断也不是特别精准,会存在误差,当判断该key不存在时,就肯定不存在;当判断该key存在时也有可能不存在),当发生缓存击穿时,布隆过滤器会有效减少数据库的压力