Redis缓存穿透、缓存击穿、缓存雪崩介绍

a0ffc9dbc8df4aac845295133d224585.gif一、Redis的缓存穿透

 

1.什么是缓存穿透?

缓存穿透是指:客户端请求的数据在缓存中和数据库中都不存在,这时缓存就永远不会生效,这些请求都打到数据库从而导致数据库压力过大。

 

2.出现缓存穿透的解决方案,以下是常用的两种:

(1)做缓存空对象:

如果一个查询返回的数据为空(不管是数据是否不存在),我们仍然把这个空结果(null)进行缓存,设置空结果的过期时间会很短,最长不超过五分钟。

缓存空对象的优缺点:

优点:实现简单,维护方便

缺点:额外的内存消耗,以及可能造成短期的数据不一致。(如果在做了空缓存之后,我们向数据库中插入了新的数据,而插入的数据正好是之前做了空缓存的数据,此时就会出现短期数据不一致的问题)

(2)使用布隆过滤器:

布隆过滤器(Bloom Filter),它实际上是一个很长的二进制向量(位图)和一系列的随机映射函数(哈希函数),它可以用于检索一个元素是否存在一个集合中,他的优点是空间的查询效率和查询时间都远远超过一般算法,缺点是有一定的误识别率和删除比较困难。

如下是加入布隆过滤器的一个实现流程

使用布隆过滤器的优缺点:

优点:内存占用少,没有多余的key

缺点:实现的过程比较复杂,并且存在误判的可能

 

二、缓存击穿

1.什么是缓存击穿

** 缓存击穿也叫热点key问题,就是一个被高并发访问并且缓存业务重构复杂的key突然失效了,无数的请求会在瞬间给数据库带来巨大的冲击。**

当缓存的热点key过期后,一个线程来请求数据,查询缓存未命中,然后从数据库中查询然后重新构建缓存数据(需要一定的时间),在缓存数据还没构建完成此时又有大量请求进来去查询数据,缓存中未命中数据,于是后面进来的请求也同步之前请求从数据库中查询数据并构建缓存的这一过程,此时这些请求全部打到数据库中,导致数据库压力变大。

大致如下图:

 

 

 

2.出现缓存击穿的结局方案:

 

即一个线程得到锁去更新数据的时候,其他线程进来去查询数据的时候需要先去获取锁才能去查询数据库来更新缓存。此时因为已经有线程去更新缓存了,故在多次查询后就可命中缓存中的数据。

(2)设置逻辑过期:

 

 

 

对比以上两种方案优缺点如下:

互斥锁

优点:

 

没有额外的内存开销

保证了一致性

实现简单

缺点

 

线程需要等待

可能会有死锁的风险

逻辑过期:

优点:

 

线程无需等待,性能较好

缺点:

 

不保证一致性

有额外的内存消耗

实现比较复杂

三、缓存雪崩

1.什么是缓存雪崩:

缓存雪崩是指:在同一时间段大量的缓存key失效或者Redis宕机,这时候大量的请求向数据库请求信息,此时可能就会把数据库压垮。

过程大致如下:

 

 

 

 

 

 

 

出现缓存雪崩的解决方案常用的有如下:

(1)给不同的key的TTL设置随机值

(2)利用Redis集群提高服务的可用性

(3) 给缓存业务添加限流降级的策略

(4)给业务添加多级缓存

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

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

相关文章

C语言第五十九弹---介绍说明内存函数memcmp

使用C语言介绍说明内存函数memcmp memcmp是C语言标准库中的一个函数,用于比较两个内存区域的内容是否相同。 源代码: int memcmp(const void* ptr1, const void* ptr2, size_t num);ptr1和ptr2分别是要比较的两个内存区域的指针,num是要比较…

es检索之复合检索

背景:向量检索是文本相似度检索,现在增加新的字段进行过滤,如果以filter方式进行过滤,那么最终结果不保证有topK个,甚至一个都没有,因为它是先进行topK个向量召回,再进行filter。 当然有人建议采用scriptScore方式进行检索,但此方式可能造成请求压力过大,内存消耗。 …

reactor的原理与实现

网络模型 前情回顾服务器模型 Reactor和 ProactorReactor模型Proactor模型同步I/O模拟Poractor模型Libevent,libev,libuv优先级事件循环线程安全 前情回顾 网络IO,会涉及到两个系统对象:   一个是用户空间调用的进程或线程   …

自媒体实战篇:作品爆款三要素的使用场景和重要性

作品爆款三要素的使用场景和重要性 什么是爆款三要素 标题 概括视频内容,吸引用户注意封面 吸引眼球,引发作者联想标签 精准分类,有利于平台精准推流优质标题要求 标题就是介绍视频故事内容的一段话,通常分为三段式注册,统称三段式标题好的标题统称是三段式的,即点明故事…

C均值算法例子

有如下数据,试使用C-均值聚类将该数据集聚为2类。初始聚类中心为P1和P2,写出计算过程。 坐标点XYP100P212P331P488P599P6107 解:6个点聚离P1,P2的距离分别如下: ( 0 , 5 , 10 , 8 2 , 9 2 , 149 (0, \sqrt 5,\sqrt {…

07 Vue3框架简介

文章目录 一、Vue3简介1. 简介2. 相关网站3. 前端技术对比4. JS前端框架5. Vue核心内容6. 使用方式 二、基础概念1. 创建一个应用2. 变量双向绑定(v-model)3. 条件控制(v-if)4. 数组遍历(v-for)5. 绑定事件…

ubuntu22.04上安装charles-proxy

在 Ubuntu 22.04 上安装 .tar.gz 格式的 Charles Proxy (charles-proxy-4.6.5_amd64.tar.gz) 需要解压缩文件并运行其中的安装脚本或可执行文件。以下是具体步骤: 1. 下载文件 假设你已经从 Charles Proxy 官网下载了 charles-proxy-4.6.5_amd64.tar.gz 文件。 2…

182.【2023年华为OD机试真题(C卷)】敏感字段加密(字符串的分割、替换和拼接实现JavaPythonC++JS)

请到本专栏顶置查阅最新的华为OD机试宝典 点击跳转到本专栏-算法之翼:华为OD机试 🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,高质量解题代码,详细代码讲解,助你深入学习,深度掌握! 文章目录 【2023年华为OD机试真题(C卷)】敏感字段加密(字符串…

leetcode 38. 外观数列(medium)(优质解法)

链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 代码: class Solution {public String countAndSay(int n) {//要进行 n - 1 次描述才能得到结果// last 代表当前要描述的字符串String last"1";// ret 代表描述…

【Python】Python 正则表达式

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功能。 compile 函数根据一个模式字符串和可…

一、引言( C#的应用领域)

C#:应用领域的探索 C#,全名为C Sharp,是一种由微软开发的、面向对象的编程语言。自其2000年首次发布以来,C#已经成为了软件开发行业的重要一员,特别是在微软的技术生态系统中,它占据了举足轻重的地位。如今…

应用安全技术措施

目录 身份鉴别 访问控制 安全审计 剩余信息保护 通信完整性 通信保密性 抗抵赖 软件容错 身份鉴别 进阶 访问控制 进阶 安全审计 进阶 剩余信息保护 进阶 通信完整性 通信保密性 抗抵赖 软件容错 ~over~

TypeScript学习(进阶篇)

一、元组 数组合并了相同类型的对象,而元组(Tuple)合并了不同类型的对象。 元组起源于函数编程语言(如 F#),这些语言中会频繁使用元组。 简单的例子 定义一对值分别为 string 和 number 的元组&#xf…

MES系统是什么?MES系统的功能有哪些?

在现代制造业的快速发展中,所有规模的企业都面临着类似的挑战:如何提高生产效率、确保产品质量、减少浪费、降低成本,同时迅速响应市场变化。而在这个过程中,传统企业管理往往有以下几个典型痛点: 纸质文件堆叠如山&a…

速盾cdn:无视cc高防

随着互联网的快速发展,网络攻击和安全威胁日益严重,高防cdn作为一种有效的防御手段,受到了广泛的应用。然而,一些攻击者常常采用CC攻击等手段来攻击目标网站,导致网站性能下降甚至瘫痪。为了解决这一问题,速…

麦肯锡产品经理问题解决流程终极指南

您是否想知道世界上最成功的产品经理如何始终如一地提供不仅满足而且超出预期的解决方案?秘密可能就在于世界上最负盛名的咨询公司之一麦肯锡公司所磨练的方法论。本文深入探讨了麦肯锡的问题解决流程,该流程专为希望提升水平的产品经理量身定制。 01. 麦…

LeetCode //C - 1004. Max Consecutive Ones III

1004. Max Consecutive Ones III Given a binary array nums and an integer k, return the maximum number of consecutive 1’s in the array if you can flip at most k 0’s. Example 1: Input: nums [1,1,1,0,0,0,1,1,1,1,0], k 2 Output: 6 Explanation: [1,1,1,0,…

五种主流数据库:基本检索功能

SQL 使用 SELECT 语句查询数据,本文比较五种主流数据库基本数据检索功能的实现和差异,包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。 🏷️示例表和数据初始化脚本下载。 SQL功能MySQLOracleSQL ServerPostgreSQLSQLite查询指定字…

Kafka生产环境问题总结与性能优化实践

Kafka可视化管理工具kafka-manager 安装及基本使用可参考: httos://wwwcnbloas.com/dadonaaa/o/8205302.html 线上环境规划 1. 消息丢失情况: 消

实战教学:零食百货商城小程序开发全程指导

随着移动设备的普及和互联网技术的发展,小程序成为越来越多人的选择,特别是在购物方面。开发一个零食百货商城小程序,可以让你在手机上随时随地购买各种零食,方便快捷。本文将为你提供全程指导,让你轻松开发一个成功的…