缓存三问与缓存预热-如何预防缓存崩溃

一、缓存三剑客

(图片来源:什么是缓存雪崩、击穿、穿透? | 小林coding)

  1. 缓存穿透 (Cache Penetration)

  • 又称"空缓存"
  • 指用户请求的数据在缓存和数据库中都不存在,导致每次请求都去查询数据库,给数据库带来巨大压力。
  • 解决办法:缓存无效key、布隆顾虑器、接口限流
  1. 缓存击穿 (Cache Breakdown)

  • 又称"热点Key"
  • 某个Key在缓存过期的瞬间,大量并发请求访问该Key,导致缓存被击穿,应用程序不得不从数据库加载数据,存在于数据库中,但不存在于缓存中
  • 解决办法:

             1.设置热点数据永不过期或者过期时间比较长。

              2.针对热点数据提前预热,将其存入缓存中并设置合理的过期时间。

              3.请求数据库写数据到缓存之前,先获取互斥锁,保证只有一个请求会落到数据库上。

  1. 缓存雪崩 (Cache Avalanche)

  • 又称"缓存失效"
  • 大量缓存key在某时段集中失效,导致大量请求涌入数据库,引发数据库压力过大甚至系统崩溃。
  • 解决办法:

           1.采用 Redis 集群,避免单机出现问题整个缓存服务都没办法使用。

            2.限流,避免同时处理大量的请求。

            3.设置不同的失效时间比如随机设置缓存的失效时间。

二、缓存击穿

【热点数据:通常会有几个数据会被频繁地访问,比如秒杀活动,这类被频地访问的数据】

如果缓存中的某个热点数据过期了,此时大量的请求访问了该热点数据,就无法从缓存中读取,直接访问数据库,数据库很容易就被高并发的请求冲垮,这就是缓存击穿的问题。可以认为缓存击穿是缓存雪崩的一个子集。

(图片来源:什么是缓存雪崩、击穿、穿透? | 小林coding)

三、缓存穿透

当用户访问的数据,既不在缓存中,也不在数据库中,导致请求在访问缓存时,发现缓存缺失,再去访问数据库时,发现数据库中也没有要访问的数据,没办法构建缓存数据,来服务后续的请求。那么当有大量这样的请求到来时,数据库的压力骤增,这就是缓存穿透的问题。

(图片来源:什么是缓存雪崩、击穿、穿透? | 小林coding)

四、缓存雪崩

大量缓存数据在同一时间过期(失效)或者 Redis 故障宕机时,如果此时有大量的用户请求,都无法在 Redis 中处理,于是全部请求都直接访问数据库,从而导致数据库的压力骤增,严重的会造成数据库宕机,从而形成一系列连锁反应,造成整个系统崩溃,这就是缓存雪崩的问题。

(图片来源:什么是缓存雪崩、击穿、穿透? | 小林coding)

五、缓存预热

缓存预热是一种在应用程序启动或缓存失效之后,主动将热点数据加载到缓存中的策略。这样,在实际请求到达应用程序时,热点数据已经存在于缓存中,从而减少了缓存未命中的情况,提高了应用程序的响应速度。

缓存预热的主要作用和目的如下:

  1. 提高缓存命中率:通过预先加载热点数据,缓存预热可以提高缓存的命中率,从而减少对后端数据源(如数据库)的访问,降低系统的负载。
  2. 保持应用程序性能稳定:在应用程序启动或缓存失效之后,缓存预热可以防止请求对后端数据源产生突然的压力,从而保持应用程序的性能稳定。
  3. 优化用户体验:由于热点数据已经存在于缓存中,用户在请求这些数据时能获得更快的响应速度,从而提高用户体验。
  1. 缓存预热可以帮助避免缓存穿透问题。

    • 通过提前将可能被访问的数据预热到缓存中,可以确保首次访问就能命中缓存,不会直接访问到数据库。
  2. 缓存预热可以缓解缓存击穿问题。

    • 如果某个热点数据被提前加载到缓存中,即使该缓存在到期的瞬间大量并发访问,也不会直接击穿缓存。
  3. 缓存预热有助于减少缓存雪崩的风险。

    • 通过定期预热缓存,可以保证缓存中始终有足够的数据,即使部分缓存失效也不会对系统造成太大冲击。

推荐文章:面试官考我Redis中的缓存穿透、缓存雪崩和缓存击穿? 拿捏!!!-腾讯云开发者社区-腾讯云

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

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

相关文章

【深度学习】【NLP】词表,分词,嵌入

from transformers import AutoTokenizertokenizer AutoTokenizer.from_pretrained("prajjwal1/bert-tiny") tokenizer.save_pretrained("./bert-tiny/")input_string "Your input string here 我是中文" token_ids tokenizer.encode(input_s…

【PID算法详解】

PID算法 PID算法介绍用途pid数学表达式及其含义P算法D算法I算法 PID总结数学公式转换代码设计实际运用PID代码实现 PID算法介绍 PID控制器是一种广泛应用于工业控制系统的反馈控制器,它通过比例(Proportional)、积分(Integral&am…

快写猪好用吗 #知识分享#笔记#学习方法

快写猪是一个非常好用的论文写作工具,它提供了强大的查重降重功能,帮助用户轻松完成论文写作任务。无论是在学术研究还是日常写作中,快写猪都能提供高效、准确的检测,确保文本的原创性和质量。 首先,快写猪的查重降重功…

朴素贝叶斯算法解析:从原理到实践

课程链接:AI小天才:让你轻松掌握机器学习 引言: 朴素贝叶斯(Naive Bayes)算法是一种简单而又高效的机器学习算法,在文本分类、垃圾邮件过滤、情感分析等领域有着广泛的应用。本文将深入介绍朴素贝叶斯算法的…

c 系统宏有多少

在C语言中,系统宏(也称为预定义宏或内置宏)的数量并不是固定的,因为它们取决于C标准、编译器以及可能的其他因素。然而,有一些常见的预定义宏是几乎所有C编译器都支持的。 以下是一些常见的C预定义宏: __…

C#拼接xml

1、xml字符串示例 <?xml version"1.0" encoding"utf-8" standalone"no"?><DATA><ITEMS><ITEM><ID>01<ID/><CODE>0001<CODE><NAME>测试1<NAME/></ITEM></ITEMS><…

利用预测大模型完成办公室饮水机剩余热水量

背景 在每天上班的时候&#xff0c;很多同事都有喝热水的习惯&#xff0c;但是饮水机内的热水量总是比较少的&#xff0c;如何避免等待&#xff0c;高效的接到热水是我接下来要做的事情的动机。 理论基础 在大量真实数据的情况下&#xff0c;可以分析出用水紧张的时间段和用水…

【css3】01-css3新特性样式篇

目录 1 背景 1.1 设置背景图片的定位 1.2 背景裁切-规定背景的绘制区域 1.3 设置背景图片尺寸 2 边框 2.1 盒子阴影box-shadow 2.2 边框图片border-image 3 文本 -文字阴影text-shadow 1 背景 1.1 设置背景图片的定位 background-origin&#xff1a;规定背景图片的定位…

【文末附gpt升级秘笈】美国AI软件工程师薪酬现状分析及行业趋势

美国AI软件工程师薪酬现状分析及行业趋势 摘要&#xff1a;随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;对AI人才的需求日益旺盛。本文基于薪资数据网站Levels.fyi的数据&#xff0c;对美国AI软件工程师的薪酬现状进行了深入分析。研究发现&#xff0c;…

科技守护,河流水文监测保障水资源安全!

中小河流是城乡水资源的补给&#xff0c;又是不可或缺的排放渠道&#xff0c;维系着城乡水资源的平衡与生态的健康。然而&#xff0c;随着工业化、城市化的快速推进&#xff0c;河流生态环境面临着越来越大的压力。为了有效保护和合理利用河流资源&#xff0c;河流水文监测成为…

C++ 构造函数和析构函数能不能是虚函数

C 构造函数和析构函数能不能是虚函数 一、构造函数能不能是虚函数二、析构函数能不能是虚函数 一、构造函数能不能是虚函数 在 C 中&#xff0c;构造函数不能是虚函数。构造函数是在对象创建时调用的&#xff0c;它们负责初始化对象的成员变量和执行其他必要的初始化操作。在对…

2024年新算法-红嘴蓝鹊优化器(RBMO)优化BP神经网络回归预测

2024年新算法-红嘴蓝鹊优化器(RBMO)优化BP神经网络回归预测 亮点&#xff1a; 输出多个评价指标&#xff1a;R2&#xff0c;RMSE&#xff0c;MSE&#xff0c;MAPE和MAE 满足需求&#xff0c;分开运行和对比的都有对应的主函数&#xff1a;main_BP, main_RBMO, main_BPvsBP_R…

Java 18 介绍及其优势,高效利用

Java 18是Java平台的最新版本&#xff0c;它在2022年3月发布&#xff0c;带来了许多新的特性和改进。作为一种广泛使用的编程语言&#xff0c;Java 18的发布受到了开发者社区的高度关注。本文将介绍Java 18的新特性及其优势。 一、Java 18的新特性 简化的编译器控制 (JEP 400)…

MySQL的事务隔离级别

MySQL的事务隔离级别用于解决并发事务中的一些问题&#xff0c;如脏读、不可重复读和幻读。MySQL支持以下四种事务隔离级别&#xff1a; READ-UNCOMMITTED&#xff08;读未提交&#xff09;&#xff1a;最低的隔离级别&#xff0c;允许读取尚未提交的数据变更&#xff0c;可能…

亡羊补牢,一文讲清各种场景下GIT如何回退

系列文章目录 手把手教你安装Git&#xff0c;萌新迈向专业的必备一步 GIT命令只会抄却不理解&#xff1f;看完原理才能事半功倍&#xff01; 常用GIT命令详解&#xff0c;手把手让你登堂入室 GIT实战篇&#xff0c;教你如何使用GIT可视化工具 GIT使用需知&#xff0c;哪些操作…

区块链的运行原理与演示

目录 前言 具体演示 1、在浏览器中输入区块链演示网址&#xff1a; 2、创建新区块 3、篡改区块信息使其无效 4、新增P2P 网络节点。 5、节点连接。 6、区块信息同步 总结 前言 区块链系统是由一系列分布在全球各地的分布式节点组成的。这些节点互不隶属&#xff0c;通过…

Mesa GL Dispatch分发分析与理解

Mesa GL Dispatch分发分析与理解 引言 这篇博客的核心是从OpenGL应用程序的典型api入手&#xff0c;分析gl api 调用到用户态驱动后端的过程&#xff0c;进而总结出一个典型的调用栈。理解了这个典型调用栈&#xff0c;对后续任何一个API的调用过程分析&#xff0c;都是a piec…

Java项目在linux上部署步骤

1、根据linux系统在网上下载对应的jdk1.8安装包&#xff0c;有32位和64位区别。 2、解压并配置jdk的环境 &#xff08;1&#xff09;解压安装包&#xff1a; tar xzvf jdk安装包 &#xff08;2&#xff09;修改环境变量&#xff1a; vim /etc/profile 最后加上: export JAVA_H…

文本匹配.grep与Select-String用法对比

Linux Shell与PowerShell上匹配字符串 grep与Select-String用法对比 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article…

家居厨房安全无小事:可燃气体报警器探头校准检测重要性解析

家居厨房作为日常生活中烹饪美食的重要场所&#xff0c;其安全问题不容忽视。 近年来&#xff0c;随着家庭用气设备的普及&#xff0c;煤气泄露事件时有发生&#xff0c;给人们的生命财产安全带来了严重威胁。 因此&#xff0c;安装可燃气体报警器探头&#xff0c;及时检测并…