首页 > 数据库 >2023-06-25:redis中什么是缓存穿透?该如何解决?

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

时间:2023-06-25 20:11:06浏览次数:45  
标签:25 存储 缓存 06 数据库 redis 穿透 数据 ID

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

答案2023-06-25:

缓存穿透

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

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

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

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

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

image.png

如何解决

1.缓存空对象

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

2.布隆过滤器拦截

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

image.png

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

标签:25,存储,缓存,06,数据库,redis,穿透,数据,ID
From: https://www.cnblogs.com/moonfdd/p/17503845.html

相关文章

  • 开发实用小技巧(1):RuntimeError: 'cryptography' package is required for sha256_passw
    问题:RuntimeError:'cryptography'packageisrequiredforsha256_passwordorcaching_sha2_passwordauthmethods这个错误通常是由于在使用MySQL数据库时,未安装或功能不完整的“cryptography”包所引起的,所以下载“cryptography”这个包即可!!!解决思路:pipinstallcryptogr......
  • 利用chatgpt解决单主机多实例模式Redis主从配置的报错问题:Error condition on socket
    今天在配置redis主从配置时,从实例报错:ErrorconditiononsocketforSYNC:Connectionrefused我是在单体机上配置三个实例,实现redis的一主二从。1.首先,创建三个文件夹,名字分别叫7001、7002、7003(我喜欢将应用安装在tmp下)#进入/tmp目录cd/tmp#创建目录mkdir70017......
  • 2023年6月25日 汇川H5UPLC突发生异常,无报警,无警告。数据丢失!
    2023年6月25日多线切割机问题描述:在人工绕线过程中,设备突发跳电,控制电源正常,动力电源接触器跳开。发现PLC报警异常。链接PLC后,发现数据全部丢失(归零)。重新上电后,输入数据,设备恢复正常运行。疑点方向:能引起数据清理的错误,首先怀疑寄存器溢出导致运算错误。还有设备本身线的长......
  • RedisInsight:Redis可视化工具介绍与使用
    RedisInsight简介RedisInsight是一个直观高效的RedisGUI管理工具,它可以对Redis的内存、连接数、命中率以及正常运行时间进行监控,并且可以在界面上使用CLI和连接的Redis进行交互(RedisInsight内置对Redis模块支持):RedisInsight提供的功能:唯一支持RedisCluster......
  • redis,mongo,mysql,es区别
    Redis、MongoDB、MySQL和Elasticsearch(ES)都是常用的数据库系统,各有不同的特点和适用场景,具体区别如下:Redis:Redis是一种高性能键值存储数据库,基于内存操作,支持数据持久化,支持数据类型丰富灵活,如字符串、哈希、列表、集合、有序集合等。Redis还提供了订阅/发布、事务、Lua脚本、......
  • 其他——25封装表单验证
    前言:在我们做vue项目,日常开发的时候,肯定会经常遇到正则表达式,例如手机号,邮箱,密码和数字,每次验证都需要去查询,浪费时间不说,也造成代码冗余,我也遇到过,那我就自己封装一个吧,方便大家使用查询。1.封装一个公共的js文件,命名rule.js://手机号验证telphone:(rule,value,callback......
  • 2023.6.25 圆和矩形是否有重叠
    原问题可以转换为,判断圆心到矩形的最短距离是否小于等于半径。根据这张图,可以得到矩形到圆心的距离是\(\sqrt{x^2+y^2}\),其中x和y分别是圆心和矩形的横纵坐标之差。求横纵坐标之差其实也很简单,以横坐标为例,圆心的坐标为x,矩形的坐标是x1和x2。那么就是\(min(|x-x_1|,|x-......
  • AIX中使用DBCA创建数据库ora-12547错误解决一例
                             AIX中使用DBCA创建数据库ora-12547错误解决一例 Couldnotloadprogramoracledevmdm:Symbolresolutionfailedfor/usr/lib/libc.a[aio_64.o]because:Symbolkaio_rdwr64(number1)isnotexportedfrom......
  • ORA-15061 reported while doing a file operation with 11.1 or 11.2 ASM after PSU
    ORA-15061reportedwhiledoingafileoperationwith11.1or11.2ASMafterPSUappliedindatabasehome[ID1070880.1]--------------------------------------------------------------------------------修改时间26-OCT-2011类型PROBLEM状态PUBLISH......
  • How to restore ASM based OCR after complete loss of the CRS diskgroup on Linux/U
    HowtorestoreASMbasedOCRaftercompletelossoftheCRSdiskgrouponLinux/Unixsystems[ID1062983.1]--------------------------------------------------------------------------------修改时间12-FEB-2012类型HOWTO状态PUBLISHEDInthis......