简单的手机网站模板免费下载,柳州市住房和城乡建设局网站首页,做盗版网站,知名高端网站建设前言
之前在针对实习面试的博文中讲到Redis在实际开发中的生产问题#xff0c;其中缓存穿透、击穿、雪崩在面试中问的最频繁#xff0c;本文加了图解#xff0c;希望帮助你更直观的了解缓存雪崩#x1f600; #xff08;放出之前写的针对实习面试的关于Redis生产问题的博…前言
之前在针对实习面试的博文中讲到Redis在实际开发中的生产问题其中缓存穿透、击穿、雪崩在面试中问的最频繁本文加了图解希望帮助你更直观的了解缓存雪崩 放出之前写的针对实习面试的关于Redis生产问题的博文链接 Redis生产问题缓存穿透、击穿、雪崩——针对实习面试
什么是缓存雪崩
缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机导致大量请求到达数据库带来巨大压力。这种场景就像雪崩一样所以叫缓存雪崩 缓存雪崩可能由以下几个原因引起 缓存数据集中过期如果缓存数据的过期时间设置不合理比如很多缓存数据设置为在同一时间过期那么在过期时刻缓存将无法提供数据导致请求直接落到数据库上。 缓存服务不可用如果缓存服务由于某些原因如宕机、网络问题等变得不可用那么所有的请求都会直接访问数据库。 数据库压力过大当大量的请求直接访问数据库时如果数据库没有足够的能力处理这些请求可能会导致数据库响应缓慢甚至崩溃。
怎么解决缓存雪崩
解决缓存雪崩的最常用措施包括
1. 过期时间随机化
为了避免大量缓存数据在同一时间过期可以给缓存数据的过期时间加上一个随机值。这样即使有大量数据需要设置为过期它们也不会在同一时刻全部失效从而减少了对数据库的瞬间压力。
图表
---------------- -------- ------------
| | 过期 | | 请求 | |
| 用户请求数据 -------- 缓存 -------- 数据库 |
| | | | | |
---------------- -------- ------------在缓存设置中加入随机过期时间可以避免大量缓存数据在同一时间过期从而减少数据库的压力 。
2. 搭建Redis高可用集群
通过搭建Redis高可用集群可以有效地防止缓存雪崩问题的发生。如果主节点发生故障从节点可以接管服务继续提供缓存服务避免了由于单点故障导致的缓存雪崩问题。
图表
-------- --------
| | | |
| Redis ------- Redis |
| Master| | Slave |
| | | |
-------- --------通过Redis的主从复制、双主、读写分离等策略提高数据库的容灾能力 。
3. 限流和降级策略
在缓存雪崩时可以采取限流、降级等策略减缓数据库的压力。例如在缓存失效后通过加锁或者使用队列来控制读数据库写缓存的线程数量。具体点就是设置某些Key只允许一个线程查询数据和写缓存其他线程等待。则能够有效的缓解大并发流量对数据库打来的巨大冲击 。
4. 数据预热
在系统上线前提前将热点数据加载到缓存中避免大量请求同时触发缓存未命中的情况 。
如何实现
使用定时任务比如 xxl-job来定时触发缓存预热的逻辑将数据库中的热点数据查询出来并存入缓存中。使用消息队列比如 Kafka来异步地进行缓存预热将数据库中的热点数据的主键或者 ID 发送到消息队列中然后由缓存服务消费消息队列中的数据根据主键或者 ID 查询数据库并更新缓存
5. 多级缓存架构
使用本地缓存如 Caffeine、Guava 等和分布式缓存如 Redis相结合的方式部分热点数据可以先放入本地缓存降低 Redis 和数据库的压力 。
6. Redis 高可用
部署 Redis 主从集群使用 Redis 的哨兵模式Sentinel或者 Redis Cluster 来实现高可用避免缓存服务器单点故障 。