Redis的缓存穿透、缓存击穿和缓存雪崩
缓存穿透:查询不存在的数据,缓存和数据库都不会命中,导致请求直接打到数据库。
解决方法:
- 使用布隆过滤器:在缓存之前加一层布隆过滤器,可以高效地判断一个元素是否可能存在于集合中。
- 为查询参数设置一个固定值:如果查询参数不存在,则返回一个默认值或空结果,并将其缓存。
缓存击穿:缓存失效时,大量请求直接打到数据库。
解决方法:
- 设置热点数据永不过期:对于访问频率高、更新频率低的数据,设置为永不过期。
- 加互斥锁:当缓存失效时,通过互斥锁保证只有一个线程去数据库查询,其他线程等待。
缓存雪崩:缓存集体失效,大量请求打到数据库。
解决方法:
- 设置随机过期时间:为缓存数据设置不同的过期时间,避免同时失效。
- 数据预热:在高峰期之前预先加载数据到缓存中。
- 监控告警:设置缓存监控告警机制,一旦发现大量缓存失效,采取相应的流量控制措施。
评论已关闭