Redis的缓存穿透、击穿、雪崩
缓存穿透:查询不存在的数据,缓存和数据库都不会命中,导致请求直接打到数据库。
解决方法:
- 使用布隆过滤器:在缓存之前加一层布隆过滤器,可以高效地判断一个元素是否可能存在于集合中。
- 缓存空值:如果数据库查询不到,也将空值缓存,并设置一个较短的过期时间。
缓存击穿:缓存失效时大量请求直接打到数据库。
解决方法:
- 加互斥锁:在缓存失效时,通过锁保证只有一个线程去数据库查询,其他线程等待。
- 预先载入缓存:定时预先刷新缓存,或者在高峰时间预热缓存。
缓存雪崩:缓存集体失效,大量请求打到数据库。
解决方法:
- 设置随机过期时间:避免大量缓存同时失效。
- Redis集群部署:提高Redis的可用性和数据分布。
- 设置缓存高可用:通过Redis Sentinel或Redis Cluster实现高可用。
- 提供备份数据源:在Redis宕机时,可以临时使用数据库或其他缓存作为备用数据源。
评论已关闭