【Redis】-缓存穿透、缓存雪崩、缓存击穿
缓存穿透:查询不存在的数据,缓存和数据库都没有,由于缓存中没有,所有请求都会打到数据库,可能会导致数据库压力剧增。
解决方法:
- 使用布隆过滤器:将所有可能查询的key存入布隆过滤器,查询时先经过布隆过滤器,如果key不存在就直接拒绝请求,避免查询数据库。
- 缓存空值:如果查询的数据不存在,可以将空值也缓存起来,设置一个较短的过期时间。
缓存雪崩:缓存在同一时间大量失效,请求全部打到数据库,可能会导致数据库压力剧增。
解决方法:
- 设置随机过期时间:使不同的key的过期时间分布更均匀。
- 缓存数据预热:在系统启动或者负载增加时,提前加载缓存数据。
- 使用Redis集群或者分布式锁:避免大量key同时失效。
缓存击穿:某个key非常热点,缓存失效的一瞬间,大量请求打到数据库。
解决方法:
- 加锁:对缓存访问加锁,保证同时只有一个线程去数据库查询数据并更新缓存。
- 增加超期时间:如果是由于热点key导致的问题,可以暂时增加该key的超期时间。
- 服务限流与降级:如果流量过大,可以暂时关闭该服务或者降级该接口。
评论已关闭