
redis三大主流问题及其解决方案
一,缓存穿透
缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。
把不存在的数据存入redis,value为null,短过期时间
缺点:可能造成短期的不一致
二,缓存雪崩
缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。
给不同的Key的TTL添加随机值
三,缓存击穿(热点key问题)
一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。
1. 互斥锁
获取不到缓存则尝试获取互斥锁
- 成功则查询数据库数据并写入缓存
- 失败则休眠后重试
2. 逻辑过期
数据在缓存不再设置TTL,但是记录逻辑过期时间
查询缓存时,如果数据已经过期,尝试获取互斥锁,成功则另开一个线程去更新数据
在数据更新完毕前获取到的数据均为脏数据