Redis如何应对缓存穿透问题——Java全栈知识(9)

我们在正常使用缓存的时候的流程大概就是这样的:
请求访问缓存,缓存有数据就返回,缓存无数据就去数据库里面查数据写入到缓存中。
image.png|500

1、缓存穿透问题

但是如果由恶意请求,短时间内大量的访问不存在的数据,这时每个请求都会打到数据库上,数据库就会扛不住压力崩掉。
图例:
image.png

2、解决方案

1、缓存空对象

我们可以将此时这个恶意请求查询的内容添加到缓存,添加为一个空值缓存,也就是缓存空对象。
缓存空对象之后,此时这个恶意请求的请求都会击中缓存了,一定程度上就解决了缓存穿透的问题。
弊端: 如果此时恶意请求是大量访问多个空对象,就会导致短时间内,内存中被大量的空对象占用,造成系统资源浪费。

2、加锁

如果Redis中不存在该数据,在请求访问数据库的时候,加一把互斥锁。此时就可以让只有一个请求访问数据库了,就不会导致数据库压力过大。
但是这种方法不可取:

  1. 首先任何需要应对高并发的系统都应该尽量避免使用互斥锁,会阻塞其他用户的操作,导致其他用户体验不佳。
  2. 可能会误杀到正常请求,如果此时是正常请求只是缓存过期了,此时就会阻塞其他的请求。
    所以这种方法并不可取。

3、布隆过滤器

image.png
布隆过滤器是一种数据结构,用于快速判断一个元素是否存在于一个集合中。具体来说,布隆过滤器包含一个位数组和一组哈希函数。位数组的初始值全部置为 0。在插入一个元素时,将该元素经过多个哈希函数映射到位数组上的多个位置,并将这些位置的值置为 1。
image.png

在查询一个元素是否存在时,会将该元素经过多个哈希函数映射到位数组上的多个位置,如果所有位置的值都为 1,则认为元素存在;如果存在任一位置的值为 0,则认为元素不存在。

1、 优缺点

优点:

  • 高效地判断一个元素是否属于一个大规模集合。(哈希函数)
  • 节省内存。(位数组)
    缺点:
  • 可能存在一定的误判。
2、 布隆过滤器误判理解(为什么会误判)
  • 布隆过滤器要设置初始容量。容量设置越大,冲突几率越低。
  • 布隆过滤器会设置预期的误判值。
3、弊端:
  1. 做的业务需要支持一定的误判率
  2. 如果恶意请求是针对这小概率的误判进行攻击,那么数据库还是会遭到很大的压力。

4、组合方案

缓存空对象+布隆过滤器

针对上述的缺点,我们可以将缓存空对象和布隆过滤器结合起来。
布隆过滤器的缺点是有小概率的误判,而且如果恶意请求拿着这个误判的值进行大量的请求,还是会对数据库造成很大的压力。但是此时如果我们针对于误判的这部分加上缓存空值,大部分的恶意请求都被布隆过滤器拦截下来了,不用担心内存大量占用的问题。此时就完美的解决了缓存穿透的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Matlab之求直角坐标系下两直线的交点坐标

目的:在直角坐标系下,求两个直线的交点坐标 一、函数的参数说明 输入参数: PointA:直线A上的点坐标; AngleA:直线A的倾斜角,单位度; PointB:直线B上的点坐标&#xf…

5个免费的3D钣金CAD软件

如果你正在设计简单的折叠钣金零件,则只需设计一些具有圆角半径的法兰:一个简单的钣金模块。 首先,你可以采用老式方式绘图并以 2D 方式完成所有操作。 许多传统制造商仍在使用 2D DWG 和 DXF 图纸。 因此,你很有可能只需快速起草…

视频声音生成字幕 pr生成视频字幕 以及字幕乱码的解决

目录 目录 1、首先把要生成字幕的视频拖入以创建序列 2、点击工具栏的 窗口 选择 文本 3、选择字幕下的 转录序列 4、选择输出的语言(主要看视频声音说的是啥语言) 5、音轨 选择 音频1​编辑 6、点击转录 7、等待转录文本 8、点击创建说明性字幕按…

【C语言】C语言运算符优先级详解

文章目录 📝前言🌉运算符优先级简述 🌠逻辑与和逻辑或🌉赋值和逗号运算符 🌠位运算🌉条件表达式🌉位运算与算术运算结合🌉混合使用条件表达式和赋值运算符🌉 逗号运算符的…

数据结构——队列(C语言版)

前言: 在学习完数据结构顺序表和链表之后,其实我们就可以做很多事情了,后面的栈和队列,其实就是对前面的顺序表和链表的灵活运用,今天我们就来学习一下队列的原理和应用。 准备工作:本人习惯将文件放在test…

MATLAB 自定义生成直线点云(详细介绍) (47)

MATLAB 自定义生成直线点云 (详细介绍)(47) 一、算法介绍二、具体步骤二、算法实现1.代码2.效果一、算法介绍 通过这里的直线生成方法,可以生成模拟直线的点云数据,并通过调整起点、终点、数量和噪声水平等参数来探索不同类型的直线数据。这种方法可以用于测试、验证和开…

两区域二次调频风火机组,麻雀启发式算法改进simulink与matlab联合

区域1结果 区域2结果 红色曲线为优化后结果〔风火机组二次调频〕

搭建 Apple Mac M1 stm32 开发环境

近期想学习 stm32 开发,看了些书和视频,买了开发板。开发板到了后就迫不及待的的进行尝试。由于我目前使用的电脑是 Apple M1 Pro,目前用的比较多的是 windows + keil。我先是在 mac 使用虚拟机,安装 win 环境来使用,但是我分别使用了 VMware 和 parallels desktop ,keil…

知行之桥EDI系统功能介绍——系统安全性

在知行之桥EDI系统中,系统安全性问题主要分为两大类: 保证知行之桥EDI系统运行的基础通过知行之桥EDI系统保护数据 保证知行之桥EDI系统运行的基础 许多安全设置由服务器配置文件管理。使用知行之桥中包含的嵌入式 Web 服务器时,可以在以下…

unity中手势识别开源代码——HandPoseBarracuda

HandPoseBarracuda是一个使用单目彩色摄像头工作的神经网络手/手指追踪器的概念验证实现。 基本上,HandPoseBarracuda是MediaPipe Hands管道的一个部分端口。尽管它并不是原始包的直接端口,但它使用了相同的基本设计和相同的预训练模型。 请注意,这只是一个概念验证实现。…

IDEA编辑国际化.properties文件没有Resource Bundle怎么办?

问题描述 最近在做SpringBoot国际化,IDEA添加了messages.properties、messages_en_US.properties、messages_zh_CN.properties国际化文件后,在编辑页面底部没有Resource Bundle,这使得我在写keyvalue的时候在每个properties文件都要拷贝一次…

Python 全栈体系【四阶】(二十)

第五章 深度学习 二、推荐系统 1. 推荐算法介绍 1.1 个性化推荐算法 人口属性 地理属性 资产属性 兴趣属性 1.2 推荐算法分支 协同过滤推荐算法基于内容的推荐算法混合推荐算法流行度推荐算法 1.3 推荐算法 为推荐系统选择正确的推荐算法是非常重要的决定。目前为止…

困难重重!如何将超导量子计算机完好无损地搬进数据中心

内容来源:量子前哨(ID:Qforepost) 编辑丨慕一 编译/排版丨浪味仙 沛贤 深度好文:3700字丨18分钟阅读 如何把超导量子计算机部署到数据中心?数据中心运营商和量子公司面临着以前没有见过的重重难关。 首…

白帽子讲Wbe安全

在安全圈子里,素有“白帽”、“黑帽”一说。 黑帽子是指那些造成破坏的黑客,而白帽子则是研究安全,但不造成破坏的黑客。白帽子均以建设更安全的互联网为已任。 Web 是互联网的核心,是未来云计算和移动互联网的最佳载体&#xff0…

漏洞扫描-让安全弱点无所遁形

随着信息技术的迅猛发展和互联网的广泛普及,网络安全问题日益凸显。在这个数字化的世界里,无论是企业还是个人,都面临着前所未有的安全威胁。安全漏洞,作为这些威胁的源头,常常被忽视或无法及时发现。 而漏洞扫描&…

牛客NC27 集合的所有子集(一)【中等 DFS Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/c333d551eb6243e0b4d92e37a06fbfc9 思路 递归实现:先升序排序;然后每个位置i为起点,i到最后的数,要么被选择,要么被放弃 递归实现;注意结果…

【MATLAB源码-第15期】基于matlab的MSK的理论误码率与实际误码率BER对比仿真,采用差分编码和IQ调制解调。

操作环境: MATLAB 2022a 1、算法描述 在数字调制中,最小频移键控(Minimum-Shift Keying,缩写:MSK)是一种连续相位调制的频移键控方式,在1950年代末和1960年代产生。[1] 与偏移四相相移键控&a…

ppp验证实验

实际操作图 1,IP划分分配 [r1]interface Serial 4/0/0 [r1-Serial4/0/0]ip add 192.168.1.1 24 [r2]interface Serial 4/0/0 [r2-Serial4/0/0]ip address 192.168.1.2 24 [r2]int Mp-group 0/0/0 [r2-Mp-group0/0/0]ip add 192.168.2.1 24 [r3]int Mp-group 0/…

RelayAttention:让大型语言模型更高效地处理长提示符

一、前言 虽然大型语言模型 (LLM) 近年来取得了非常显著的进展,也在各种自然语言处理任务中展现出强大的能力。然而,LLM 的在实际的应用落地层面也面临着一些实际挑战,其中之一就是效率和成本问题,导致了在垂直行业实际落地的应用…

【python】Jupyter Notebook 修改默认路径

文章目录 一、修改前(一)问题(二)修改前的默认路径 二、修改配置文件、更改路径(一)找到配置文件并打开(二)创建目标文件夹、得到新的路径(三)修改配置文件 三…
最新文章