Redis在SpringBoot中遇到的问题:预热,雪崩,击穿,穿透
问题解释:
- 预热:系统启动时,由于Redis缓存还未预热,导致接口响应时间较长。
- 雪崩:大量的Redis缓存失效,导致数据库(DB)负载过高,甚至服务不可用。
- 击穿:Redis缓存失效时,大量请求直接打到数据库,可能会瞬间压垮数据库。
- 穿透:查询不存在的数据,缓存和数据库都不会命中,导致请求源源不断地打到数据库。
解决方法:
- 预热:可以通过在系统启动时手动加载热点数据至Redis,或者使用定时任务预热缓存。
- 雪崩:设置合理的缓存失效时间,并实现缓存预热;或使用互斥锁或队列控制,防止大量key同时失效;使用Redis集群或者Redis Sentinel;实现缓存热点数据的永不失效。
- 击穿:可以设置缓存的缓冲时间较高,避免大量请求直接打到数据库;或者实现锁或队列控制,避免并发请求打到数据库。
- 穿透:可以对查询结果为空的情况也进行缓存,并设置较短的过期时间;或者使用布隆过滤器(Bloom Filter)预先检查数据是否存在。
评论已关闭