缓存被穿透了怎么办?

这篇具有很好参考价值的文章主要介绍了缓存被穿透了怎么办?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先来了解几个概念:

缓存穿透:大量请求根本不存在的key

缓存雪崩:redis中大量key集体过期

缓存击穿:redis中一个热点key过期(大量用户访问该热点key,但是热点key过期)

穿透解决方案

    • 对空值进行缓存

    • 设置白名单

    • 使用布隆过滤器

    • 网警

雪崩解决方案

    • 进行预先的热门词汇的设置,进行key时长的调整

    • 实时调整,监控哪些数据是热门数据,实时的调整key的过期时长

    • 使用锁机制

击穿解决方案

    • 进行预先的热门词汇的设置,进行key时长的调整

    • 实时调整,监控哪些数据是热门数据,实时的调整key的过期时长

    • 使用锁机制

三者出现的根本原因在于Redis命中率下降,请求直接打在DB上。

正常情况下,大量的资源请求都会被redis响应,在redis得不到响应的小部分请求才会去请求DB,这样DB的压力是非常小的,是可以正常工作的(如下图)

缓存被穿透了怎么办?

如果大量的请求在redis上得不到响应,那么就会导致这些请求会直接去访问DB,导致DB的压力瞬间变大而卡死或者宕机。

    • 大量的高并发的请求打在redis上

    • 这些请求发现redis上并没有需要请求的资源,redis命中率降低

    • 因此这些大量的高并发请求转向DB(数据库服务器)请求对应的资源

    • DB压力瞬间增大,直接将DB打垮,进而引发一系列“灾害”

如下图所示

缓存被穿透了怎么办?

那么为什么redis会没有需要访问的数据呢?通过分析大致可以总结为三种情况,也就对应着redis的雪崩、穿透和击穿

缓存被穿透了怎么办?

情景分析

缓存穿透

缓存穿透产生的原因:请求根本不存在的资源(DB本身就不存在,Redis更是不存在)

举例(情景在线):客户端发送大量的不可响应的请求

当大量的客户端发出类似于:http://localhost:8080/user/19833?id=-3872 的请求,就可能导致出现缓存穿透的情况。因为数据库DB中本身就没有id=-3872的用户的数据,所以Redis也没有对应的数据,那么这些请求在redis就得不到响应,就会直接打在DB上,导致DB压力过大而卡死情景在线或宕机。

缓存穿透很有可能是黑客攻击所为,黑客通过发送大量的高并发的无法响应的请求给服务器,由于请求的资源根本就不存在,DB就很容易被打垮了。

解决方案

对空值进行缓存:

类似于上面的例子,虽然数据库中没有id=-3872的用户的数据,但是在redis中对他进行缓存(key=-3872,value=null),这样当请求到达redis的时候就会直接返回一个null的值给客户端,避免了大量无法访问的数据直接打在DB上

实时监控:

对redis进行实时监控,当发现redis中的命中率下降的时候进行原因的排查,配合运维人员对访问对象和访问数据进行分析查询,从而进行黑名单的设置限制服务(拒绝黑客攻击)

使用布隆过滤器

使用BitMap作为布隆过滤器,将目前所有可以访问到的资源通过简单的映射关系放入到布隆过滤器中(哈希计算),当一个请求来临的时候先进行布隆过滤器的判断,如果有那么才进行放行,否则就直接拦截

接口校验

类似于用户权限的拦截,对于id=-3872这些无效访问就直接拦截,不允许这些请求到达Redis、DB上。

注意事项:

    • 使用空值作为缓存的时候,key设置的过期时间不能太长,防止占用太多redis资源

    • 使用空值作为缓存只能防止黑客重复使用相同的id暴力攻击,但是如果黑客使用动态的无效id攻击就没有效果(需要配合网警)

    • 使用布隆过滤器也是有哈希冲突的可能

缓存雪崩

缓存雪崩产生的原因:redis中大量的key集体过期

举例:

当redis中的大量key集体过期,可以理解为redis中的大部分数据都被清空了(失效了),那么这时候如果有大量并发的请求来到,那么redis就无法进行有效的响应(命中率急剧下降),请求就都打到DB上了,到时DB直接崩溃。

解决方案:

    • 将失效时间分散开

    • 通过使用自动生成随机数使得key的过期时间是随机的,防止集体过期

    • 使用多级架构

    • 使用nginx缓存+redis缓存+其他缓存,不同层使用不同的缓存,可靠性更强

    • 设置缓存标记

    • 记录缓存数据是否过期,如果过期会触发通知另外的线程在后台去跟新实际的key

    • 使用锁或者队列的方式

    • 如果查不到就加上排它锁,其他请求只能进行等待

缓存击穿

产生缓存雪崩的原因:redis中的某个热点key过期,但是此时有大量的用户访问该过期key

举例:

类似于“某男明星塌房事件”上了热搜,这时候大量的“粉丝”都在访问该热点事件,但是可能优于某种原因,redis的这个热点key过期了,那么这时候大量高并发对于该key的请求就得不到redis的响应,那么就会将请求直接打在DB服务器上,导致整个DB瘫痪。

解决方案:

    • 提前对热点数据进行设置

    • 类似于新闻、某博等软件都需要对热点数据进行预先设置在redis中

    • 监控数据,适时调整

    • 监控哪些数据是热门数据,实时的调整key的过期时长

    • 使用锁机制

    • 最后的防线,当热点key过期,那么就使用锁机制防止大量的请求直接打在DB

链接:https://zhuanlan.zhihu.com/p/596265834

(版权归原作者所有,侵删)文章来源地址https://www.toymoban.com/news/detail-462184.html

到了这里,关于缓存被穿透了怎么办?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云盘满了怎么办?阿里云服务器云盘扩容操作了解一下

         1.背景      2.确定扩容云盘类型与控制台操作      3.ECS实例内部扩容操作说明          3.1 ECS实例内部执行扩容分区          3.2 ECS实例内部执行扩容文件系统      软件应用的数据库所在服务器磁盘使用率已经达到97%,服务器操作实例如下:      一旦使用

    2024年02月08日
    浏览(62)
  • 蓝屏怎么办电脑蓝屏怎么办?蓝屏问题详细分析

    蓝屏怎么办电脑蓝屏怎么办?最近很多小伙伴在咨询这个问题,其实电脑蓝屏了进不去,我们可以重新启动电脑,如果进入系统后还是直接蓝屏,那么你可以尝试一下,关机重启,然后在进入系统的时候,狂按f8,下面我们详细的说说。   一.电脑蓝屏进不去系统 在电脑蓝屏

    2024年02月05日
    浏览(66)
  • Github官网进不去怎么办?Github无法访问怎么办?

    打开hosts文件,可能需要管理员权限。 win10 hosts位置:C:WindowsSystem32driversetc 在末尾新建一行,添加如下内容: 访问 http://tool.chinaz.com/dns/ ,在输入框中填写 github.com,然后点击检测按钮,会列出响应ip,如图: 选最小TTL值的IP 在hosts文件结尾输入: 执行 ipconfig /flushdns 刷新

    2024年02月10日
    浏览(53)
  • 手机照片误删怎么办,电脑照片误删怎么办怎么才能找回,EasyRecovery来帮您

    手机照片误删怎么办,电脑照片误删怎么办怎么才能找回,EasyRecovery 2023来帮您!!! EasyRecovery 2023是一款操作安全、价格便宜、用户自主操作的 数据恢复 方案,它支持从各种各样的 存储介质 恢复删除 或者丢失的文件,其支持的媒体介质包括: 硬盘驱动器 、光驱、闪存、

    2024年02月12日
    浏览(60)
  • 计算机中丢失msvcr120.dll怎么办,电脑找不到msvcr120.dll怎么办

    电脑提示msvcr120.dll丢失是一个常见的问题,这个问题通常会在你尝试打开某些程序或游戏时出现。这个问题的原因是因为你的电脑缺少了一个名为msvcr120.dll的文件,这个文件是微软Visual C++ Redistrle for Visualv 2013的一部分。如果你遇到了这个问题,不要担心,下面是三种解决方法

    2024年02月13日
    浏览(59)
  • 鼠标滚轮失灵怎么办?

    鼠标是非常重要的一个外设,我们经常需要使用鼠标的滚轮来上下滚动浏览网页中的内容,非常方便。但是最近有用户发现自己的鼠标上下滚轮出现问题,操作不灵敏,这该怎么办? 针对windows电脑 1、 同时按住Win+R键,打开运行,输入regedit,回车进入注册表编辑器; 2、 展

    2024年02月11日
    浏览(44)
  • 电脑突然死机怎么办?

    死机是电脑常见的故障问题,尤其是对于老式电脑来说,一言不合电脑画面就静止了,最后只能强制关机重启。那么你一定想知道是什么原因造成的吧,一般散热不良最容易让电脑死机,还有系统故障,比如不小心误删了系统运作的必要文件。那么面对电脑突然死机我们用什

    2024年04月10日
    浏览(57)
  • 怎么测试网络延迟,网络延迟过大怎么办?

    在各式各样的数据在网络介质中通过网络协议(如TCP/IP)进行传输,如果信息量过大不加以限制,超额的网络流量就会导致设备反映缓慢,造成网络延迟。 定义:在传输介质中传输所用的时间,即从报文开始进入网络到它开始离开网络之间的时间。 单位:毫秒(MS) 如何定义网

    2024年02月05日
    浏览(53)
  • win11取消开机密码pin无法删除怎么办 win11关闭开机密码pin选项灰色怎么办

    很多用户设置默认的开机密码pin,但是由于感觉太麻烦了,想要关闭该功能。结果发现选项变成了灰色,无法直接删除。那么win11关闭开机密码pin选项灰色该怎么办呢?今天小编就给大家具体的解决方法,有需要的用户们赶紧来看一下吧。 具体步骤如下: 1.右键开始菜单 。

    2024年02月16日
    浏览(49)
  • 全面解析:路由器设置192.168.1.1打不开怎么办?不知道192.168.1.1密码怎么办?

    我们在设置路由器时要进入192.168.1.1进行设置。可是,如果悲催的进不了192.168.1.1该怎么办呢?亦或是不知道登录192.168.1.1密码,该如何设置路由器?不用担心,本文将全面向大家解析这类问题,有需要的朋友快点来收藏吧! 192.168.1.1 192.168.1.1密码 192.168.1.1打不开 192.168.1.1设置

    2024年02月06日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包