Redis三大缓存问题:缓存穿透、缓存击穿、缓存雪崩的场景以及解决方法
缓存穿透:查询不存在的数据,缓存和数据库都不会命中,导致请求直接打到数据库。
解决方法:
- 使用布隆过滤器:在缓存之前加一层布隆过滤器,可以高效地判断一个元素是否可能存在于集合中。
- 缓存空对象:查询不存在的数据时,也将空对象存入缓存,并设置一个较短的过期时间。
缓存击穿:缓存失效时,大量请求直接打到数据库。
解决方法:
- 设置热点数据永不过期或过期时间长一些。
- 使用分布式锁:更新缓存的时候获取分布式锁,保证同时只有一个线程去数据库查询最新数据并更新缓存。
缓存雪崩:缓存集体失效,大量请求打到数据库。
解决方法:
- 设置缓存数据的随机过期时间,避免集体失效。
- 实现服务降级策略,在缓存失效时,通过限流或者熔断等手段避免大量请求打到数据库。
- 提前监控缓存的健康状况,在发现大量缓存失效前手动刷新缓存。
评论已关闭