发布信息

深入探讨Redis缓存问题:缓存穿透、缓存雪崩与缓存击穿的解决方案

作者:软荐小编      2025-02-11 14:01:20     112

前言

REDIS目前是一个非常流行的高速缓存数据库。主要功能之一是避免直接点击数据库的大量请求,从而减轻数据库服务器上的压力。如果使用缓存,您可以放心吗?不,不,不,不,没有这样的完美技术。我们需要谈论缓存渗透,缓存雪崩和缓存故障的问题。

文字1。缓存穿透1.1简短描述

缓存渗透意味着缓存或数据库中搜索的数据不存在,导致每次未检索请求时从缓存中检索到数据,并且请求将请求调用到数据库服务器,但没有相应的数据库中的数据。最后,每次将所有请求发送到数据库时;如果在高频道的情况下或某人恶意攻击,它将增加背景数据库服务器的压力,并且系统最终可能会崩溃。让我们直接拍照:

缓存服务器软件_缓存服务有哪些_缓存器软件服务是什么

简要说明:

CACHE REDIS服务器颜色描述:绿色块意味着有缓存的数据,粉红色块意味着缓存中没有数据;绿色箭头意味着直接从缓存获得数据;黄色箭头是指通过缓存从数据库中搜索数据,但不一定是。

该过程大致如下:

大量客户向服务器启动了大量请求。服务器代码逻辑将首先缓存。如果有缓存的数据(绿色部分),则数据将直接从缓存中检索并返回;如果缓存中没有数据(粉红色部分),则该请求将直接调用到数据库服务器(例如黄色箭头)。如果有大量未经数据的请求,则数据库最终会因压力过大而崩溃,从而导致系统不可用。 1.2通用解决方案1.3开花过滤器

Bloom过滤器不专门用于缓存穿透。它具有许多应用程序方案,例如避免使用电子邮件,爬行软件调整大小,视频推送重复等等。一些朋友可能不明白为什么会这样使用它,所以让我们简要地谈论Bloom过滤器的原理。

首先拍照:

缓存服务器软件_缓存服务有哪些_缓存器软件服务是什么

简要说明:

首先,使用一个键,您需要确定是否存在密钥(此处,密钥可以是您要存储的任何数据,例如用户ID,视频标识等);多次对关键执行哈希计算;每种哈希算法获得的结果都不同;上面的图片仅绘制哈希计算3次。实际上,根据错误率,哈希次数的数量不同。将与下标索引相对应的哈希结果的位更改为1,表明存在。上图的散列三次,结果分别为2、5、9,然后将相应的位置更改为1;如果您需要确定键是否在过滤器中,则还需要多次执行哈希计算。上图是三次,并使用计算的结果作为获得相应标识的索引:只要相应的位置值三倍,它就证明了键中的密钥不存在。如果确定存在,则三个结果的相应位置的值应为1。但是,这是可能的,因为不同的键和哈希的结果可能是相同的,这将导致设置对应的索引位。如下图所示,存在冲突。首先假设Key1和Key2哈希的结果三次是相同的(存在实际场景)。如果Key1首先设置位置2、5和9到1的值,则当Key2进来确定存在时,由于哈希的结果是相同的,因此错误地判断出它在滤镜中不存在。错误判断率可以在Bloom过滤器中控制。如果需要降低错误判断率,请执行更多的哈希计算。同一位置的概率降低;但这将影响效率,并且会有其他内存开销。哈希时间越多,您需要识别的位数越多。即使存在错误判断的率,它也很小,在大多数情况下都是可以接受的。 1.4使用Bloom过滤器

由于您谈论的是Redis,所以让我们谈谈Redis的Bloom过滤器。实际上,朋友可以使用Redis的位图根据他们的需求实施。那么有什么好车轮吗?当然,自REDIS 4.0以来,有一个Bloom过滤器组件,该组件在开箱即用。当然,还有其他一些大型镜头,基于内存和分布式的。 。在这里,我简要讨论了Redis Bloom过滤器的插件。我个人认为这很好,所以我建议这样做。

官方文件地址:

我正在使用CentOS进行演示,主要步骤如下:

如果没有git,则需要安装它;如果您不使用git缓存服务器软件,请下载代码压缩软件包; yum install -y git收集了redis金发过滤器的源代码,并在此处使用git;您也可以下载它; git克隆进入代码目录制造(生成redisbloom.so文件)。如果找不到Make命令,则需要安装VC ++汇编相关的软件包; CD Redisbloom使配置Redisbloom插件,以将Redisbloom插件加载到Redis配置文件中,然后重新启动。也可以开始。指定运行的加载插件时;配置文件方法:将以下配置添加到配置文件中,您需要指定redisbloom.so的特定文件位置。然后指定要启动的配置文件; ./redis-server redis.conf启动时,指定模块操作模式:./redis-server -loadmodule ./redisbloom.O Soipe Simple Commands与常规命令相同,因此我不需要使用它们。让我们再次编写程序。如果需要的话,只需说几个简单的句子:A。将数据保存在过滤器中,例如所有用户ID; B.当请求到达时,首先是从过滤器中判断。没有数据,没有直接返回,没有缓存,没有数据库; C.如果有一个新添加的用户,则需要将新用户ID放置在过滤器中;

仍然有一些Redis Bloom过滤器的命令,因此您可以去浏览官方网站。一些朋友说缓存服务器软件,不使用此插件可以吗?当然,它可以自己实施。但是,有些朋友已经包装包装,有些是基于内存的,有些是基于Redis的,如下图所示:

缓存服务有哪些_缓存器软件服务是什么_缓存服务器软件

我不会上传代码,其余的将留给我的朋友。

2。缓存雪崩1.1简短描述

缓存雪崩是指高速缓存层突然无法获得的,这会导致大量请求直接击中数据库,最终由于数据库压力过大,系统可能会崩溃。缓存层的不可用是指以下两个方面:

如图所示:

缓存器软件服务是什么_缓存服务器软件_缓存服务有哪些

简要说明:

CACHE REDIS服务器颜色描述:绿色块表示缓存的数据,粉红色块意味着缓存中没有数据;白色块是指大规模无效的缓存数据,绿色箭头是指直接从缓存获得数据。黄色箭头意味着从数据库中通过缓存检查数据。

该过程大致如下:

大量客户向服务器启动了大量请求。服务器代码逻辑将首先缓存。如果有缓存的数据(绿色部分),则数据数据将直接从缓存中检索;如果缓存到期(白色块部分),则该请求将直接调用。数据库服务器(例如黄色箭头)。如果有大量的热数据请求,但是热数据大规模到期,则数据库最终会因压力过大而崩溃,从而导致系统无法使用。 1.2通用解决方案3。缓存崩溃1.1简短说明

缓存分解是指超级热点数据的突然到期,导致数据请求在到期期间直接击中超级热点,以使数据库服务器由于某些一定的压力而导致数据库服务器崩溃超热数据。

超热数据:例如,闪存销售期间的数据。如果在闪存销售期间,淘宝,董和Duoduo等平台上的数据失败,请求的量将足以导致数据库崩溃。

如图所示:

缓存器软件服务是什么_缓存服务有哪些_缓存服务器软件

简要说明:

CACHE REDIS服务器颜色描述:绿色块表示缓存的数据,粉红色块意味着缓存中没有数据;白色圆圈表示超级热点缓存的数据到期并到期,绿色箭头是指直接从缓存中获取数据。黄色箭头意味着从数据库中通过缓存检查数据。

该过程大致如下:

大量客户向服务器启动了大量请求。服务器代码逻辑将首先缓存。如果有缓存的数据(绿色部分),则数据数据将直接从缓存中检索;如果超热缓存数据到期(白色圆圈部分),则该请求将直接单击到数据库服务器(例如黄色箭头)。超级热数据到期和失败,例如闪存销售数据。如果在闪存销售期间失败,则数据库最终会因压力过大而崩溃,从而导致系统不可用。

注意:这仅用于超热数据,而不是大规模数据。

1.2公共解决方案摘要

无论哪个问题是,缓存渗透,缓存雪崩,缓存故障,主要原因是高速缓存层没有命中,并且该请求直接击中数据库,最终导致数据库上的压力过大和不可用的系统。朋友根据系统需求处理问题。没有完美的解决方案,但是总会有一个适合需求的解决方案。解决业务问题是真正的目的。

我今天没有发布代码。我相信我的朋友可以根据解决方案编写相应的代码。分布式锁可能很难处理。下次我会花时间为您安排。

关于Redis系列,下一篇文章讨论了最初完成的LUA脚本。其余的是实际战斗的摘要。在使用该项目期间,如果有好的计划和困难的问题,我将与我的朋友分享。接下来,将启动数据库优化系列,主要针对MySQL。

相关内容 查看全部