缓存穿透、缓存击穿、缓存雪崩区别和解决方案

article/2025/8/26 2:20:51

一、缓存处理流程

      前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。

      

 

二、缓存穿透

       描述:

       缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。

      解决方案:

  1. 接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截;
  2. 从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击

 

三、缓存击穿

      描述:

      缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力

      解决方案:

  1. 设置热点数据永远不过期。
  2. 加互斥锁,互斥锁参考代码如下:

         

 

          说明:

          1)缓存中有数据,直接走上述代码13行后就返回结果了

         2)缓存中没有数据,第1个进入的线程,获取锁并从数据库去取数据,没释放锁之前,其他并行进入的线程会等待100ms,再重新去缓存取数据。这样就防止都去数据库重复取数据,重复往缓存中更新数据情况出现。

          3)当然这是简化处理,理论上如果能根据key值加锁就更好了,就是线程A从数据库取key1的数据并不妨碍线程B取key2的数据,上面代码明显做不到这点。

 

四、缓存雪崩

      描述:

      缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同的是,        缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。

     解决方案

  1. 缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
  2. 如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。
  3. 设置热点数据永远不过期。

http://chatgpt.dhexx.cn/article/xBIvMXbe.shtml

相关文章

缓存穿透,缓存雪崩,缓存击穿的超详解

文章目录 1、缓存穿透问题的解决思路2、缓存雪崩问题及解决思路3、缓存击穿问题及解决思路 1、缓存穿透问题的解决思路 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库&#xff0c;失去了缓存的…

redis 缓存穿透,缓存击穿,缓存雪崩

虽然我们在使用 redis 缓存的时候非常的爽&#xff0c;它大大的提高了我们应用程序的性能和效率&#xff0c;尤其是数据查询方面&#xff0c;咱们不用直接去持久化的数据库中查询数据&#xff0c;而是到内存中查询数据即可 事物总是有两面的&#xff0c;用的爽的同时&#xff…

缓存穿透、缓存击穿、缓存雪崩的理解和解决方案

目录 一、缓存穿透 二、缓存击穿 三&#xff1a;缓存雪崩 在生产环境中&#xff0c;会因为很多的原因造成访问请求绕过了缓存&#xff0c;都需要访问数据库持久层&#xff0c;虽然对Redsi缓存服务器不会造成影响&#xff0c;但是数据库的负载就会增大&#xff0c;使缓存的作…

详解缓存穿透、缓存雪崩、缓存击穿

背景 在现代软件架构中&#xff0c;缓存的应用已经非常普及。缓存的使用在面试和实践中都是避不开的硬技能、硬知识&#xff0c;如果你说还不太熟悉缓存的使用&#xff0c;可能都不好意思说自己是程序员。 这篇文章&#xff0c;带大家进一步学习在缓存使用中不得不考虑三个特…

【Redis】缓存击穿问题及其解决方案

【Redis】缓存击穿问题及其解决方案 文章目录 【Redis】缓存击穿问题及其解决方案1. 缓存击穿概念2. 解决方案2.1 互斥锁2.1.1 互斥锁的优缺点2.1.2 互斥锁的代码实现 2.2 逻辑过期2.2.1 逻辑过期的优缺点2.2.2 逻辑过期的代码实现 1. 缓存击穿概念 缓存击穿&#xff1a;缓存击…

Redis 缓存穿透、缓存击穿、缓存雪崩

文章目录 一、缓存穿透1. 概念2. 解决方案 二、缓存击穿1. 概念2. 解决方案 三、缓存雪崩1. 概念2. 解决方案 一、缓存穿透 1. 概念 key 对应的数据在redis中并不存在&#xff0c;每次针对此 key的请求从缓存获取不到&#xff0c;请求转发到数据库&#xff0c;访问量大了可能…

Redis中的缓存穿透、雪崩、击穿的原因以及解决方案(详解)

一、概述 ① 缓存穿透&#xff1a;大量请求根本不存在的key&#xff08;下文详解&#xff09; ② 缓存雪崩&#xff1a;redis中大量key集体过期&#xff08;下文详解&#xff09; ③ 缓存击穿&#xff1a;redis中一个热点key过期&#xff08;大量用户访问该热点key&#xff0c;…

Redis——缓存击穿、穿透、雪崩

1、缓存穿透&#xff1a; &#xff08;1&#xff09;问题描述&#xff1a;key对应的数据并不存在&#xff0c;每次请求访问key时&#xff0c;缓存中查找不到&#xff0c;请求都会直接访问到数据库中去&#xff0c;请求量超出数据库时&#xff0c;便会导致数据库崩溃。如一个用…

ping端口

1.ping端口&#xff1a; telnet 62.78.63.209 10105 2.如果提示telnet不是内部或外部命令… 则&#xff1a;右击“此电脑”–>选择“控制面板主页”,单击“程序”&#xff0c;如图&#xff1a; 3.完成。

windows下ping端口

上图的操作完成以后 进入dos控制台 输入telnet ip地址 端口号 回车 标识已ping通 ping不通是这种提示 转载于:https://www.cnblogs.com/shianliang/p/8639392.html

windows ping 端口测试

前言 项目中存在能ping通IP地址&#xff0c;但是打不开web应用程序&#xff0c;这时需要测试端口能否ping通。 解决方法 测试是否能够ping通192.168.0.1的80端口 telnet 192.168.0.1 80遇到问题 ‘telnet’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 …

Windows Server 启用或关闭ping端口

启用或关闭 ping 端口有两种方式&#xff0c;如下 1、通过命令行设置 打开 ping 端口 netsh firewall set icmpsetting 8关闭 ping 端口 netsh firewall set icmpsetting 8 disable2、通过高级安全 Windows 防火墙设置 打开 “高级安全 Windows 防火墙” &#xff0c;在入…

windows系统ping端口及利用telnet命令Ping 端口

第一步&#xff1a; 第二步&#xff1a;打开telnet client 第三步&#xff1a;telnet ip 端口

Mac系统用命令打开ping端口的方法

电脑上不了网问题相信大家都有遇到过&#xff0c;排查网络故障问题用到ping&#xff0c;之前windows系统上能够轻松打开ping端。但是如果在Mac电脑该如何打开ping端口&#xff1f;其实打开方法并不复杂&#xff0c;接下来小编给大家演示Mac系统用命令打开ping端口的方法。 Mac…

linux ping 某个端口,linux 怎么ping 端口

满意答案 cysdmt 推荐于 2016.12.05 采纳率&#xff1a;54% 等级&#xff1a;8 已帮助&#xff1a;864人 linux命令ping用法详解 功能说明&#xff1a;检测主机。 语 法&#xff1a;ping [-dfnqrrv][-c][-i][-i][-l][-p][-s][-t][主机名称或ip地址] 补充说明&#xff1a;执行…

Win10系统Ping端口及利用telnet命令Ping 端口

启用 telnet 客户端组件为 Ping 端口做准备 在程序界面下&#xff0c;选择“打开或关闭Windows功能”&#xff0c;如下图所示&#xff1a; 在打开的对话框中&#xff0c;找到“Telnet客户端”并勾选。最后点击“确定”&#xff0c;等待几分钟&#xff0c;系统将会为你开启Teln…

计算机ping使用的端口,mac系统ping端口命令怎么使用

最近电脑出问题了&#xff0c;上不了网&#xff0c;想排查下电脑的问题出在哪儿就需要ping&#xff0c;但是该如何打开终端如何ping呢?下面就让学习啦小编教大家MAC系统ping端口命令怎么使用吧。 Mac系统ping端口命令的使用方法 方法一&#xff1a; 在桌面上的DOCK栏中&#x…

w7系统怎么ping服务器,win7系统中如何ping端口命令

正常情况下&#xff0c;win7系统时无法ping端口的&#xff0c;不过要是开启了Telnrt客户端&#xff0c;则可以实现这一功能&#xff0c;启用Telnrt客户端需要用户进入Windows 组件中勾选&#xff0c;当然&#xff0c;如果用户有一个可以专门Ping端口的第三方软件也是可以的。 一…

Win10如何ping端口是否开放

如何ping端口是否开放 前言一、打开Telent Client功能1.打开控制面板2.进入启用Windows功能页面&#xff0c;勾选Telnet客户端3.打开cmd&#xff0c;输入命令 telnet ip 端口4.回车如果进入黑屏页面&#xff0c;则ping通了&#xff0c;否则显示连接失败 前言 ping具体的网址是…

自制python版 在线ping 端口检查工具 python3.5 +docker

自己有几十台服务器需要实现在线检查是否在线和网络延时情况 1.开搞。 docker run -d -p 8000:8000 -i -t -v /pyFile:/usr/src/python python:3.5 /bin/bash 在docker 部署python3.5https://blog.csdn.net/qq_44741568/article/details/120035609 2. 进入容器 &#xff0c…