缓存雪崩 & 缓存穿透
缓存雪崩 & 缓存穿透.png
缓存流程
1.参数传入对象主键ID
2.根据key从缓存中获取对象
3.如果对象不为空,直接返回
4.如果对象为空,查询数据库
5.如果从数据库查询出的对象不为空,则放入缓存(设定过期时间)
缓存雪崩
如果我们的缓存挂掉了,这意味着我们的全部请求都跑去数据库了。
如果缓存数据设置的过期时间是相同的,并且Redis恰好将这部分数据全部删掉。
这就会导致在这段时间内,这些缓存同时失效,全部请求到数据库中。
缓存挂掉解决方案
-
事发前
- 主从架构+Sentinel
- Cluster
- 分布式缓存架构
- 设置过期标志更新缓存
- 使用锁或队列
- 二级缓存
-
事发中
- 设置本地缓存(ehcache)+限流(hystrix)
-
事发后
- 缓存持久化