Redis 缓存穿透和雪崩的概念介绍

2023-11-19

Redis 缓存穿透和雪崩的概念

缓存穿透

缓存穿透的概念其实很简单,我们经常使用 Redis 作为缓存数据库,如果用户相插叙一个数据,但是发现 Redis 没用这条数据,也就是没有命中 Redis 数据库中的数据,于是就到数据库中查询。

上述看起来很正常,没有什么问题,但是如果很多的用户出现额时候,缓存都没有命中(比如淘宝秒杀),于是都请求数据库,这给数据库造成很大压力,这也就是缓存穿透。

解决方案

场景的有

  1. 布隆过滤器

布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力。

  1. 缓存空对象

当 MySQL 不命中后,返回个空对象,并且也将其缓存起来,同时会设置一个过期时间,之后再访问都得到这个数。

但是空值能够被缓存起来,意味着需要更多的空间存储更多的键,这当中可能会有很多的空值的键。即便空值设置了过期时间,还是会存在 Redis 和 MySQL 的数据会有一段时间窗口的不一致,这对于需要保持一致性的业务会有影响。

缓存击穿

与缓存穿透不同的是,缓存击穿,是指一个 key 非常常用,很多人都对这个 key 不停的查询,比如双十一在抢某个东西,某个点大量人都知道消息并且搜索,大并发集中对这一个点进行访问,如果这个 key 突然到了失效的瞬间,持续的大并发就穿破缓存,直接请求数据库。

就像在墙上上凿开了一个洞。当某个key在过期的瞬间,有大量的请求并发访问,这类数据一般是热点数据,由于缓存过期,会同时访问数据库来查询最新数据,并且回写缓存,会导使数据库瞬间压力过大。

解决方案

  1. 热点数据永不过期

既然是热点数据,没有设置过期时间,所以不会出现热点 key 过期后产生的问题。

  1. 加互斥锁

使用分布式锁,保证对于每个key同时只有一个线程去查询后端服务,其他线程没有获得分布式锁的权限,因此只需要等待即可。这种方式将高并发的压力转移到了分布式锁,因此对分布式锁的考验很大。

缓存雪崩

缓存雪崩,是指在某一个时间段,缓存集中过期失效。Redis 宕机!

比如在双十一的时候,马上就要到双十二零点,很快就会迎来一波抢购,这波商品时间比较集中数据的放入了缓存,假设缓存一个小时。那么到了凌晨一点钟的时候,这批商品的缓存就都过期了。而对这批商品的访问查询,都落到了数据库上,对于数据库而言,就会产生周期性的压力波峰。于是所有的请求都会达到数据库,数据库的调用量会暴增,导致挂掉的情况。

比较致命的缓存雪崩,是导致缓存服务器某个节点宕机或断网。因为自然形成的缓存雪崩,一定是在某个时间段集中创建缓存,这个时候,数据库也是可以顶住压力的。无非就是对数据库产生周期性的压力而已。而缓存服务节点的宕机,对数据库服务器造成的压力是不可预知的,很有可能瞬间就把数据库压垮。

解决方案

  1. Redis 集群

这个思想的含义是,既然 Redis 有可能挂掉,那我多增设几台 Redis,这样一台挂掉之后其他的还可以继续,也就是集群

  1. 限流降级

这个解决方案的思想是,在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。

  1. 数据预热

数据加热的含义就是在正式部署之前,我先把可能的数据先预先访问一遍,这样部分可能大量访问的数据就会加载到缓存中。在即将发生大并发访问前手动触发加载缓存不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis 缓存穿透和雪崩的概念介绍 的相关文章

随机推荐

  • 蜣螂算法优化BP神经网络(DBOBP)数据预测分类模型

    代码运行效果截图
  • Spring事务传播行为,事务隔离级别以及事务失效的场景

    文章目录 事务的实现 事务的传播行为 propagation behavior 事务的隔离级别 事务失效的原因 访问权限 方法被final修饰 方法内部调用 解决办法 新加一个XxxHelpService类 解决办法 在该Service类中
  • 【1day】复现泛微OA某版本SQL注入漏洞

    注 该文章来自作者日常学习笔记 请勿利用文章内的相关技术从事非法测试 如因此产生的一切不良后果与作者无关 目录 一 漏洞描述 二 影响版本 三 资产测绘 四 漏洞复现 一 漏洞描述 泛微e cology是一款由泛微网络科技开发的协同管理平台
  • 活动报名|分布式人工智能:可扩展性、效率和泛化性

    2023年05月25日 星期四 14 00 15 30 智源社区 智源Live 第42期 线上活动将在线举办 阅读原文 报名即可参加 活动主题 分布式人工智能 可扩展性 效率和泛化性 安波 安波是新加坡南洋理工大学校长委员会讲席教授和南洋理
  • dc-8 靶机渗透学习

    信息收集 扫描当前网段 nmap sP 192 168 202 0 24 扫描开放端口 nmap A p v 192 168 202 147 访问靶机的80端口 用Wappalyzer识别框架 随便看看页面 简单对存在的参数进行sql测试
  • JNI字段描述符“([Ljava/lang/String;)V”

    Ljava lang String V 它是一种对函数返回值和参数的编码 这种编码叫做JNI字段描述符 JavaNative Interface FieldDescriptors 一个数组int 就需要表示为这样 I 如果多个数组doubl
  • 项目实训:bd搜索爬虫

    百度爬虫 1 requests库使用 2 lxml库使用 3 pandas库使用 4 数据清洗 5 数据分析可视化 结构分析 接下来的对目标爬虫的结构进行分析 爬虫思路 分析数据来源在哪 如何模拟的像真实用户 如果提取数据 如何保存数据 文
  • UE4 射线检测案例(C++)

    UE4 射线检测 C 开发场景 玩家 C 开发的 武器 C 射线检测函数 蓝图 C 效果 制作流程 添加开火按键映射 新建一个继承ACharacter的C 用蓝图继承刚刚新建的C 然后设置好游戏模式 我 这是是 用了一个枚举 其实你直接调用
  • Linux-ubuntu系统查看显卡型号、显卡信息详解、显卡天梯图

    本文将介绍如下内容 如何在ubuntu系统中查看显卡型号 其他文章大多只介绍了命令而未介绍如何对应显卡型号 在ubuntu系统中显卡详细信息 以及所代表的含义 显卡天梯图 2019年7月 一 查看显卡型号 1 查看显卡型号命令 lspci
  • 自定义全局异常

    1 自定义响应结果码 接口 public interface ResultCode 操作是否成功 true为成功 false操作失败 boolean success 操作代码 int code 提示信息 String message 2 自
  • Xmind for Mac 绿色破解(包含激活序列码)

    下载地址 主程序 https www xmind cn xmind downloads xmind 8 update8 macosx dmg 破解补丁 https carrot ctfile com fs 11269771 30027815
  • Centos7 配置SSH

    一 何为SSH 1 SSH的功能 SSH 为 Secure Shell 的缩写 由 IETF 的网络小组 Network Working Group 所制定 SSH 为建立在应用层基础上的安全协议 SSH 是较可靠 专为远程登录会话和其他网
  • CSDN高校俱乐部名师百校行——河北站

    CSDN高校俱乐部启动IT名师百校行活动 一方面通过线下讲座把CSDN骨灰级导师的宝贵经验分享给高校学生 促进CSDN和高校的沟通互动 一方面将高校俱乐部的学习小组带到高校 公益培养IT技术爱好者为企业所需人才 结合技术直播 组织线下讲座
  • 商标45类分类表明细表_注册商标没选择好分类,注册下来也白搭

    商标是区别商品或服务来源的一种标志 每一个注册商标都是指定用于某一商品或服务上的 正是为了商标检索 审查 管理工作的需要 把某些具有共同属性的商品组合到一起 编为一个类 将所有商品及服务共划分为45个类别 形成了商标分类表 商标注册用商品和
  • 输入一串字符,输出其最长单词的长度(不要求输出最长单词)

    无非就是要解决两个问题 1 如何判断一个单词的开始 lastchar 2 统计该单词的长度 sum 3 记录最大单词长度 max 以下是不用数组的做法 include
  • 系统架构设计师 8:系统质量属性与架构评估

    软件系统属性包括功能属性和质量属性 软件架构重点关注的是质量属性 为了精确 定量地表达系统的质量属性 通常会采用质量属性场景的方式进行描述 在确定软件系统架构 精确描述质量属性场景后 就需要对系统架构进行评估 软件系统架构评估是在对架构分析
  • 乘势而起,走进2019年风口“边缘计算”

    戳蓝字 CSDN云计算 关注我们哦 作者 pasca 原创 蛋蛋团 ID dandan tuan 5G火了 也带火了边缘计算 2019年3月 一篇 5G风口扩散 超清视频边缘计算概念崛起 的文章意外走红 直接导致此前不温不火的 百度搜索暴增
  • 微服务+Jenkins 简单的linux自动部署脚本

    No 1 启停脚本 bin bash 加载配置 避免获取不到java home source etc profile SERVICE HOME 项目路径 SERVICE NAME 服务名称 cd SERVICE HOME SERVICE N
  • easyclick与autojs的对比和常用代码(完善中)

    作成了文档 链接 https easydoc xyz s 10157628 加入我们的QQ群553908361 和各作者同群交流 该教程优先发布于收费脚本v群 部分代码收集于网络 现在已经不知道作者谁了 如有侵权 请私信我进行删除 启动ap
  • Redis 缓存穿透和雪崩的概念介绍

    Redis 缓存穿透和雪崩的概念 缓存穿透 缓存穿透的概念其实很简单 我们经常使用 Redis 作为缓存数据库 如果用户相插叙一个数据 但是发现 Redis 没用这条数据 也就是没有命中 Redis 数据库中的数据 于是就到数据库中查询 上