Redis缓存的穿透、击穿和雪崩

1. 缓存穿透

通过某个key比如A进行查询时,每次都不能从缓存中获取到数据,因此每次都是访问数据库进行查询(数据库中也没有)。

解决方案
当key值A从数据库未查询到数据时,在缓存中将A的值设为空并设置过期时间。

2. 缓存击穿

某个热点key A在高并发的请求的情况下,缓存失效的瞬间,大量请求击穿缓存访问数据库。

解决方案

  • 1.业务允许的情况下,热点数据不过期;
  • 2.构建互斥锁,在第一个请求创建完成缓存后再释放锁,从而其他请求可以通过key访问缓存;

3. 缓存雪崩

雪崩是指缓存中大量数据过期导致系统涌入大量查询请求时,因大部分数据在Redis层已经失效,请求渗透到数据库层,大批量请求引起数据库压力造成查询堵塞甚至宕机。

代码层面,设置数据过期时间:

  • 1.数据失效时间分散,不要在同一个时间大量缓存数据失效;
  • 2.业务允许的情况下,数据不失效;

架构层面:

  • 1.redis高可用,Redis Cluster,主从同步,避免redis全盘奔溃;
  • 2.缓存分级,ehcache + redis + mysql模式,本地内存中无数据再从redis中查找;再者,MySQL实现限流和降级,避免宕机。
  • 3.redis必须要持久化,重启后从磁盘加载数据,快速恢复缓存数据;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。