2023-06-25:redis中什么是缓存穿透?该如何解决?

news/2024/11/30 20:46:53/

2023-06-25:redis中什么是缓存穿透?该如何解决?

答案2023-06-25:

缓存穿透

缓存穿透指的是查询一个根本不存在的数据,在这种情况下,无论是缓存层还是存储层都无法命中。因此,每次请求都需要访问数据库,这将导致不存在的数据每次都需要查询存储层,这样缓存就失去了保护后端存储的作用。缓存穿透问题的解决对于维护系统性能和资源利用至关重要。

造成缓存穿透的基本原因有两个。

缓存穿透的主要原因有两个。

首先,可能是由于业务代码或数据本身出现问题。例如,如果数据库中的ID从1开始自增,而某些请求携带了不存在的ID值(比如负数或特别大的值),如果对参数不进行校验,这些请求将会绕过缓存直接访问数据库。由于数据库中也查不到对应的数据,每个请求都会以相同的方式处理,这样会给数据库带来很大压力,尤其是在高并发的情况下,容易导致系统崩溃。

其次,缓存穿透也可能由恶意攻击、爬虫等行为造成,这些请求大量命中缓存但数据却不存在,导致每个请求都需要访问存储层。这种情况下,攻击者可以通过大量的无意义请求消耗系统资源,从而影响系统的正常运行。

image.png

如何解决

1.缓存空对象

当存储层不命中时,即使在数据库中也没有找到命中的数据,仍然将空对象保存到缓存层中。这样,下次对该数据的访问将从缓存中获取,从而保护了后端数据源的访问。然而,需要注意的是如果频繁存储空值,会导致缓存层占用更多的内存空间,尤其在面对攻击时问题更为严重。因此,可以为这类数据设置较短的过期时间,以使其能够自动被清理出缓存。

2.布隆过滤器拦截

在访问缓存层和存储层之前,使用布隆过滤器提前保存已存在的键,并进行第一层拦截。例如,对于一个推荐系统,存在4亿个用户ID,每个小时根据用户的历史行为计算并存储推荐数据。然而,对于最新的用户由于没有历史行为,可能发生缓存穿透。为此,可以将所有推荐数据的用户ID构建成布隆过滤器。如果布隆过滤器认为某个用户ID不存在,就不会进一步访问存储层,从而在一定程度上保护了存储层。

image.png

这些方法适用于数据命中率不高、数据相对稳定、实时性要求较低(通常是数据集较大)的应用场景。尽管实施这些方法可能会增加代码的维护复杂性,但能有效减少缓存空间的占用。


http://www.ppmy.cn/news/622025.html

相关文章

cf刷题记录- 5 1

文章首发于我的个人博客:欢迎大佬们来逛逛 文章目录 TaixInteresting drinkFenceFancy FenceLaptopsMove BracketsOlesya and RodionIQ testRegistration systemVanya and LanternsT-primesCut Ribbon Taix 问你 n个 1 2 3 4 中, 可以组成多少组&#xf…

neovim 键位映射

neovim 键位映射 neovim的键位映射是指将键盘上的一组按键绑定到vim 插件的某一个功能。 7 种模式 官方文档原文: There are seven sets of mappings For Normal mode: When typing commands. For Visual mode: When typing commands while the Visual area is h…

【Spring Cloud Alibaba Seata 处理分布式事务】——每天一点小知识

💧 S p r i n g C l o u d A l i b a b a S e a t a 处理分布式事务 \color{#FF1493}{Spring Cloud Alibaba Seata 处理分布式事务} SpringCloudAlibabaSeata处理分布式事务💧 🌷 仰望天空,妳我亦是行人.✨ &#x1f98…

windows10密钥激活失败 0x80072efe

window10(专业版)正版密钥激活失败,错误代码:0x80072efe. 首先检查密钥是否输错,在没有输错和网络没有问题的情况下,使用正版光盘里面的激活密钥激活系统,出现激活失败无法激活,有时…

win7激活提示错误代码0x80072EE2的最可行解决办法

很多同学在激活win7旗舰版,专业版和家庭版的时候遇到过提示错误代码0x80072EE2的困难,小编经过几次周折,终于完美解决问题,下面小编就把相关经验为大家分享一下。一,首先保证你的密钥是可用的,如果密钥失效…

软件测试面试题(完整版)

1、B/S架构和C/S架构区别 B/S 只需要有操作系统和浏览器就行,可以实现跨平台,客户端零维护,维护成本低,但是个性化能力低,响应速度较慢 C/S响应速度快,安全性强,一般应用于局域网中&#xff0c…

漏洞分析|死磕Jenkins漏洞回显与利用效果

0x01 背景 近期我们发起了一个Goby漏洞挑战赛的活动,在活动期间收到了大量的反馈信息,延伸出一系列在编写POC漏洞检测与利用中考虑场景不全的问题,我们针对发现的各种场景用市面上常见的工具进行了一些列的对比工作,发现市面上工…

20200222在ubuntu20.04下编译全志R16的tinav3.0.4成功

20200222在ubuntu20.04下编译全志R16的tinav3.0.4成功(烧录/运行的任何问题,概不负责!^_) 2020/2/22 22 17:48 全志R系列的Tina系统官方推荐使用Ubuntu12.04编译,不过Ubuntu12.04的LTS生命支持周期结束了。 Ubuntu14.0…