redis 缓存击穿 穿透 雪崩
缓存击穿
什么是缓存击穿
- 发生了高并发时,因为1个key的缓存过期 导致大批量的数据越过了缓存访问到了db层。
解决方案
- 对并发请求使用分布式锁如redis 的setnx
- 上述操作存在一个问题,如果redis锁过期了,会导致别的线程乱入,可以这么解决:使用一个线程去获取db,另一个线程check 过期时间 自动给锁续期.
缓存穿透
什么是缓存穿透
- 发生了高并发时,因为大量系统中不存在的key 打到了系统中导致了系统中压根不存在的数据打到了db层。
解决方案
缓存雪崩
什么是缓存雪崩
- 发生了高并发时,因为大量key的缓存过期 导致大批量的数据越过了缓存访问到了db层。
- 和缓存击穿区别是缓存击穿是因为一个key ,雪崩是大量的key
解决方案
准确0点过期
- 参考击穿的解决方案,利用分布式锁,一个个排着队去获取key。
时长过期
- 使用随机时间过期策略