- Redis缓存雪崩
Redis缓存雪崩指的是在某个时间点,大量的缓存数据同时过期或者失效,导致请求都落到了后端数据库上,造成数据库短时间内承受不了庞大的请求压力而崩溃。
解决方案:
- 设置不同的过期时间:不同的缓存对象设置不同的过期时间。
- 加入过期时间随机值:为了避免同时失效,可以添加一个随机的过期时间偏移量。
- 做好热点数据的预热:提前将热点数据加载到缓存中。
- Redis缓存穿透
Redis缓存穿透指的是攻击者通过构造一些恶意的请求去访问对应不存在的缓存数据,在这种情况下,由于缓存中该数据不存在,每次请求都会落到数据库上,就会导致数据库被拖垮。
解决方案:
- 布隆过滤器:布隆过滤器是一种快速判断一个元素是否存在于一个集合中的数据结构。可用于过滤掉攻击者查询缓存中不存在的数据。
- 业务层面做参数校验:根据业务场景,对用户传入的参数进行合法性校验,如果不符合条件则直接返回错误信息。
- 缓存空对象:如果查询的数据不存在,可以将空对象缓存起来,下次再有相同的请求时就能够直接从缓存中获得空对象的信息。
- Redis缓存击穿
Redis缓存击穿指的是某个热点数据在缓存过期或者被清除的瞬间,大量请求同时涌入后端数据库,造成了对数据库的巨大压力甚至是宕机。
解决方案:
- 加锁:在访问热点数据之前,先尝试获取一个分布式锁,只有一台机器可以成功获取到锁,其他机器等待释放锁之后再重新请求。
- 异步更新缓存:当发现缓存即将过期时,异步地去更新缓存,这样可以避免在缓存失效时间段内大量请求同时涌入后端数据库。
- 熔断降级:当请求量突然增大时,可以通过关闭服务或者使用备用方案来减轻后端数据库的负载。




