目录

Redis 缓存异常 —— 缓存雪崩、击穿、穿透

目录

引入缓存层,会有缓存异常的三个常见问题,分别是缓存雪崩、击穿、穿透。
本文总结了这三个问题的定义、原因以及应对方案。
请看如下表格,希望对您有帮助 ~

缓存异常问题描述产生原因应对方案
缓存雪崩大量的应用请求无法在Redis缓存中进行处理,从而使得大量请求发送到数据库层,导致数据库压力过大甚至宕机。大量数据同时过期- 均匀设置过期时间,避免同一时间过期
- 互斥锁,保证同一时间只有一个应用在构建缓存
- 双key策略,主key设置过期时间,备key永久,主key过期时,返回备key的内容
- 后台定时刷新
Redis故障宕机- 服务熔断
- 请求限流
- 搭建Redis高可用集群
缓存击穿一个热点数据的缓存失效,导致大量请求直接落到数据库上,造成数据库压力过大,影响系统性能。频繁访问的热点数据过期- 互斥锁
- 不给热点数据设置过期时间
- 后台定时刷新(过期前刷新)
缓存穿透被大量请求缓存和数据库都没有的数据,所有的请求都会直接穿透到数据库,会导致数据库压力过大,甚至垮掉。访问的数据既不在缓存,也不再数据库- 非法请求限制
- 缓存空值
- 布隆过滤器

参考

https://cloud.tencent.com/developer/article/1924661
https://www.xiaolincoding.com/redis/cluster/cache_problem.html#%E7%BC%93%E5%AD%98%E9%9B%AA%E5%B4%A9