Redis缓存的几个名词,缓存命中、缓存穿透、缓存雪崩、缓存击穿

news2025/7/9 17:03:41

本文为转载整理:原文地址为【https://zhuanlan.zhihu.com/p/422627839】

1. 缓存命中

缓存命中(cache hit):当应用程序或软件请求数据时,会首先发生缓存命中。首先,中央处理单元(CPU)在其最近的内存位置(通常是主缓存)中查找数据。如果在缓存中找到请求的数据,则将其视为缓存命中。

在这里插入图片描述

而在Redis中的缓存命中为:

在这里插入图片描述

用户的数据一般都是存储于数据库,数据库的数据是落在磁盘上的,磁盘的读写速度可以说是计算机里最慢的硬件了。

当用户的请求,都访问数据库的话,请求数量一上来,数据库很容易就奔溃的了,所以为了避免用户直接访问数据库,会用 Redis 作为缓存层。

因为 Redis 是内存数据库,我们可以将数据库的数据缓存在 Redis 里,相当于数据缓存在内存,内存的读写速度比硬盘快好几个数量级,这样大大提高了系统性能。

2. 缓存穿透

指查询一个数据库一定不存在的数据。

在这里插入图片描述

正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存。

假如有恶意攻击,就可以利用这个漏洞,对数据库造成压力,甚至压垮数据库。

2.1. 解决方案

2.1.1. 缓存空对象

  1. 如果数据库查询对象为空,就缓存空对象,再次访问这个数据,就会从缓存中获取,以此保护后端数据源。

  2. 如果缓存NULL,是做无用功,还是会造成缓存穿透。

  3. 缓存空对象遇到的两个问题:

  • 如果是网络恶意攻击(每次key不一样,且数据库不存在)
  • 缓存占用了更多的内存。

2.1.2. 使用布隆过滤器

3. 缓存击穿

是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。

在这里插入图片描述

4. 缓存雪崩

指在某一个时间段,缓存集中过期失效。

当某一个时刻出现大规模的缓存失效的情况,那么就会导致大量的请求直接打在数据库上面,导致数据库压力巨大,如果在高并发的情况下,可能瞬间就会导致数据库宕机。这时候如果运维马上又重启数据库,马上又会有新的流量把数据库打死。这就是缓存雪崩。

在这里插入图片描述

4.1. 造成缓存雪崩的原因是什么?

造成缓存雪崩的关键在于在同一时间大规模的key失效。

为什么会出现这个问题呢,有下面几种可能:

  • 第一种可能是Redis宕机,
  • 第二种可能是采用了相同的过期时间。

4.2. 解决方法

4.2.1. 过期时间设置随机值

在原有的失效时间上加上一个随机值,比如,1-5分钟随机。这样就避免了同一时间大量数据过期现象的发生而导致缓存雪崩。

4.2.2. 分布式部署且均匀分布热点数据

如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。同时,分布式集群可以防止Redis宕机导致缓存雪崩的问题。

4.2.3. 热点数据永不过期

设置热点数据永远不过期。

5. 总结

缓存雪崩和缓存击穿主要是数据不在缓存上,而缓存穿透是数据既不在缓存上,也不在数据上。

5.1. 缓存穿透的解决方法:

  • 入口进行合法性验证
  • 缓存空值或者缺省值
  • 使用布隆过滤器快速判断

5.2. 缓存击穿的解决方法:

  • 不设置过期时间
  • 加互斥锁

5.3. 缓存雪崩的解决方法:

  • 给过期时间加上小的随机数
  • redis 设置主从集群

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/37032.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL之BufferPool

文章目录前言一、BufferPool是什么二、BufferPool的组成2.1 结构图2.2 如何读取缓冲页三、BufferPool在MySQL中的作用前言 本文会讲述BufferPool是什么,BufferPool的组成,在mysql中的作用 一、BufferPool是什么 在mysql中是用来缓存磁盘中的页&#xff…

央企招聘:中储粮集团2023公开招聘公告(校招+社招,共700人)

中国储备粮管理集团有限公司2023年度招聘包括校园招聘和社会招聘,计划招募优秀人才700余人。 中国储备粮管理集团有限公司是经国务院批准组建的涉及国家安全和国民经济命脉的国有大型重要骨干企业,受国务院委托具体负责中央储备粮油棉的经营管理&#xf…

SSM毕设项目 - 基于SSM的房屋出租出售系统(含源码+论文)

文章目录1 项目简介2 实现效果2.1 界面展示3 设计方案3.1 概述3.2 系统流程3.2.1 系统开发流程3.2.2 操作流程3.3 系统结构设计4 项目获取1 项目简介 Hi,各位同学好呀,这里是M学姐! 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品…

【学习笔记31】JavaScript冒泡排序和选择排序

笔记首发 一、冒泡排序 (一)核心原理 循环遍历数组,当前单元和下一个单元进行数据比较按照从小到大排序,应该是当前单元小于下一个单元,如果当前单元大于下一个单元,将交换两个单元存储的数据一次循环结束…

44、Map

一、基本介绍: 1、Map接口实现类的特点[很实用] 注意:这里讲的是JDK8的Map接口特点 1)Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value 2)Map 中的 key和value 可以是任何引…

5个超好用的视频素材网站,视频剪辑必备。

推荐五个高质量视频素材网站,免费、可商用,赶紧收藏起来!1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx网站素材非常丰富,有平面、UI、电商、办公、视频、音频等相关素材,视频素材质量很高,…

SpringBoot2.x系列教程31--SpringBoot中的缓存实现方案介绍

前言 作为一个程序员,我们不仅仅要把项目的功能实现出来,还要追求这个功能的高效和健壮,我们得想办法对项目的功能进行各种优化和性能的提升。其中缓存就是对程序性能进行显著提升的一个有效手段,那么在SpringBoot中对缓存有哪些…

我的数学学习回忆录——一个数学爱好者的反思(一)

早点关注我,精彩不迷路!我是一个热爱数学20余年的数学爱好者,曾奉数学为宇宙的真理和一切行动的指南的极客。从小对数字世界好奇和敏感,玩各种数学思维游戏,然后在高考应试和竞赛中扎实训练数学基础,逐渐把…

[附源码]java毕业设计中华美食网站

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

docker安装filebeat 进行日志收集

1.介绍 filebeat和beats的关系 首先filebeat是Beats中的一员。   Beats在是一个轻量级日志采集器,其实Beats家族有6个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比Logstash&#x…

matlab学习笔记(五)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 matlab学习笔记(五)一、绘制下列连续时间信号的波形图二、绘制下列离散时间信号的波形图三.已知信号f(t)的波形如下图所示,请用MATLAB绘出…

ES filter查询 高亮查询 聚合查询

filter查询 query,根据你的查询条件,去计算文档的匹配度得到一个分数,并且根据分数进行排序,不会做缓存的。 filter,根据你的查询条件去查询文档,不去计算分数,而且filter会对经常被过滤的数据进…

C++中的多态(上)

🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸 文章目录一、多态的概念二、虚函数三、破坏多态条件的现象1.破坏多态条件一,虚函数重写/覆盖2.破坏多态条件二四、 多态的两个条件不满足…

数据库审核工具SQLE部署及使用

点击上方蓝字关注我SQLE( https://opensource.actionsky.com/sqle/ )是由上海爱可生信息技术股份有限公司 开发并开源,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。我们…

PC_磁盘HDD_SSD

文章目录磁盘存储器组成磁盘驱动器磁盘控制器盘片platter存储区域磁盘结构磁道track扇区sector🎈/块Block🎆磁头(Head)圆柱面cylinder磁记录原理磁盘性能指标记录密度磁盘的容量非格式化容量格式化容量数据传输率磁盘转速旋转周期T例平均存取时间纯读/写…

网络与通信程序设计-基于UDP的广播通信实例

目录 实验内容和设计思想 实验的内容 UDP的设计思想 UDP的协议头部 UDP通信编程思想 UDP的工作流程 UDP编程收发函数 广播通信 广播模式设置 广播套接字 UDP Socket的使用过程 UDP广播通信实例实现 initsock.h 服务器发送广播消息 客户端接收广播消息 运行效果 …

HttpMessageConverter 消息转换器

HttpMessageConverter 简介 HttpMessageConverter 是SpringMVC中提供的一个策略接口,它是一个消息转换器类,Spring Mvc中就是由HttpMessageConverter负责转换HTTP的请求和响应。 默认情况下,Spring Boot 会自动加载如下消息类型转换器&…

spring复习01,IOC的思想和第一个spring程序helloWorld

spring复习01,IOC的思想及本质IOC的思想一个小例子,来体会IOC的基础思想。dao层dao层接口dao层实现类service层service层接口service层实现类测试代码service层实现类修改测试代码修改IOC容器在spring中的简单实现创建项目在pom.xml中引入依赖实体类创建…

C# 拨号面板 高亮显示

一 拨号面板 显示:绘制4x3; 数据:每一格对应一个数字; 行为:点击单元格时有反应; 二 拨号事件 当点击某个号码时,触发拨号事件。 设计思路: ① 重写OnMouseClick(); ② 根据鼠标点击位置&am…

JVET-AB0117-基于模板的帧内推导的方向性融合

本提案是针对 ECM 中的 TIMD(基于模板的帧内模式推导,Template based intra mode derivation ) 的技术的加权方式的改进。具体地,本提案提出使用方向混合(directional blending)来加权TIMD使用模板推导的两…