博客
关于我
6.Redis缓存穿透、缓存击穿、缓存雪崩
阅读量:805 次
发布时间:2023-03-31

本文共 783 字,大约阅读时间需要 2 分钟。

缓存穿透、击穿与雪崩优化

一、缓存穿透

1.1 什么是缓存穿透

缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中。这种情况通常需要额外的容错机制,避免大量请求直接打击存储层,影响系统性能。

1.2 缓存穿透的原因

  • 业务逻辑或数据本身出现问题
  • 恶意攻击或爬虫等造成空命中

1.3 解决缓存穿透

  • 缓存空结果:对于查询为空的请求,可以将结果缓存一段时间,设置较短过期时间
  • 布隆过滤器:通过布隆过滤器预检数据是否存在,避免不必要的数据库查询

缓存穿透的优缺点对比

解决方式 优点 缺点
缓存空对象 代码维护简单 需设置合理过期时间,可能导致数据不一致,缓存空间占用较多
布隆过滤器 缓存空间占用少 代码复杂性增加,可能存在假阳性,数据变更需及时更新

二、缓存击穿

2.1 什么是缓存击穿

缓存击穿是指在高并发场景下,缓存失效时,多个请求同时触发数据库查询,导致数据库瞬时压力增大,严重影响系统性能。

2.2 缓存击穿的原因

  • 热点数据:频繁访问的数据一旦缓存失效,会引发大量的数据库查询
  • 缓存过期时间短:过期时间不足,导致短时间内大量请求同时访问数据库

2.3 如何解决缓存击穿

  • 加锁机制:在请求到达时获取分布式锁(如Redis的SETNX),确保只有一次查询数据库
  • 提前更新缓存:在缓存即将过期时,主动更新缓存内容
  • 设置合理的过期时间:针对热点数据,延长缓存过期时间以减少频率

三、缓存雪崩

3.1 什么是缓存雪崩

缓存雪崩是指由于存储层服务中断,导致所有请求都直接打击数据库,引发数据库系统性故障。这种情况通常发生在缓存层全体失效时

3.2 如何防范缓存雪崩

  • 保证缓存高可用性:采用Redis Sentinel或Cluster等高可用方案,确保缓存层服务稳定
  • 双缓存架构:通过多级缓存降低缓存失效概率
  • 限流与降级:对流量进行控制,在高峰期返回默认值或降级接口

转载地址:http://hpefk.baihongyu.com/

你可能感兴趣的文章
UML- 组件图(构件图)
查看>>
oracle 监听器的工作原理
查看>>
oracle 行转列
查看>>
Oracle 表
查看>>
oracle 课堂笔记
查看>>
Oracle 返回结果集的 存储过程
查看>>
Oracle 递归
查看>>
Oracle 递归函数与拼接
查看>>
oracle 逻辑优化,提升高度,综合SQL上下文进行逻辑优化
查看>>
oracle 闪回关闭,关闭闪回即disable flashback的操作步骤
查看>>
oracle 限制用户并行,insert /*parallel */ 到不同用户,并行起不来的问题
查看>>
oracle--用户,权限,角色的管理
查看>>
Oracle-定时任务-JOB
查看>>
oracle.dataaccess 连接池,asp.net使用Oracle.DataAccess.dll连接Oracle
查看>>
oracle00205报错,Oracle控制文件损坏报错场景
查看>>
Oracle10g EM乱码之快速解决
查看>>
Oracle10g下载地址--多平台下的32位和64位
查看>>
Oracle10g安装了11g的ODAC后,PL/SQL连接提示TNS:无法解析指定的连接标识符
查看>>
oracle11g dataguard物理备库搭建(关闭主库cp数据文件到备库)
查看>>
Oracle11G基本操作
查看>>