前言
对于系统查多改少的数据,可以通过缓存来提升系统的访问性能。一般情况下我们会采用 Redis ,但是如果仅仅依赖 Redis 很容易出现缓存雪崩的情况。为了防止缓存雪崩可以通过 Redis 高可用,主从+哨兵解决方案、本地 ehcache 缓存 + hystrix 限流&降级、Redis 持久化 等手段有效的防止缓存雪崩。其中同时使用本地缓存和Redis 缓存就是两级缓存。本文主要介绍的内容就是:在SpringBoot 项目下实现两级缓存,具体的介绍内容如下:
- 什么是缓存雪崩?
- 什么是两级缓存?
- SpringBoot 实现两级缓存解决方案。
- SpringBoot 集成 layering-cache 实现两级缓存
什么是缓存雪崩?
对于不了解什么是缓存雪崩小伙伴,这里在简单的介绍一下。如果您了解什么是缓存雪崩可以绕过该小节。
对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机。缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据库必然扛不住,它会报一下警,然后就挂了。此时,如果没有采用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。
这就是缓存雪崩。
![dc5a2fbeb4f2f7b909bfe460846c98c3.png](https://i-blog.csdnimg.cn/blog_migrate/135d73651b4bb31a4c5426076c156b71.png)
为了防止缓存雪崩,一般会采用方式如下:
事前:Redis 高可用,主从+哨兵,Redis cluster,避免全盘崩溃。
事中:本地 Ehcache 缓存 + Hystrix 限流&降级,避免 MySQL 被打死。
事后:Redis 持久化,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。
缓存雪崩介绍引用 https://github.com/shishan100/Java-Interview-Advanced 中华石杉--互联网Java进阶面试训练营
什么是两级缓存?
一级缓存就是:本地缓存,二级缓存就是:Redis。当访问请求过来的时候,先从一级缓存获取数据,如果一级缓存不存在则从二级缓存中获取,从二级缓存获取到数据后在将其设置到一级缓存。
为什么两级缓存可以防止缓存雪崩?
当Redis 宕机后请求会获取本地缓存而不是直接走MySql 来防止缓存雪崩