当前位置: 首页 > news >正文

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

缓存穿透

什么是缓存穿透

缓存穿透说简单点就是大量请求的 key 根本不存在于缓存中,导致请求直接到了数据库上,根本没有经过缓存这一层。举个例子:某个黑客故意制造我们缓存中不存在的 key 发起大量请求,导致大量请求落到数据库。

缓存穿透的大致流程

如下图所示,用户的请求最终都要跑到数据库中查询一遍。

 解决办法

最基本的就是首先做好参数校验,一些不合法的参数请求直接抛出异常信息返回给客户端。比如查询的数据库 id 不能小于 0、传入的邮箱格式不对的时候直接返回错误消息给客户端等等。

1)缓存无效 key

如果缓存和数据库都查不到某个 key 的数据就写一个到 Redis 中去并设置过期时间,具体命令如下: SET key value EX 10086 。这种方式可以解决请求的 key 变化不频繁的情况,如果黑客恶意攻击,每次构建不同的请求 key,会导致 Redis 中缓存大量无效的 key 。很明显,这种方案并不能从根本上解决此问题。如果非要用这种方式来解决穿透问题的话,尽量将无效的 key 的过期时间设置短一点比如 1 分钟。

另外,这里多说一嘴,一般情况下我们是这样设计 key 的: 表名:列名:主键名:主键值 。

2)布隆过滤器

布隆过滤器是一个非常神奇的数据结构,通过它我们可以非常方便地判断一个给定数据是否存在于海量数据中。我们需要的就是判断 key 是否合法,有没有感觉布隆过滤器就是我们想要找的那个“人”。

具体是这样做的:把所有可能存在的请求的值都存放在布隆过滤器中,当用户请求过来,先判断用户发来的请求的值是否存在于布隆过滤器中。不存在的话,直接返回请求参数错误信息给客户端,存在的话才会走下面的流程。

加入布隆过滤器之后的缓存处理流程图如下。

但是,需要注意的是布隆过滤器可能会存在误判的情况。总结来说就是: 布隆过滤器说某个元素存在,小概率会误判。布隆过滤器说某个元素不在,那么这个元素一定不在。

为什么会出现误判的情况呢? 我们还要从布隆过滤器的原理来说!

我们先来看一下,当一个元素加入布隆过滤器中的时候,会进行哪些操作:

  1. 使用布隆过滤器中的哈希函数对元素值进行计算,得到哈希值(有几个哈希函数得到几个哈希值)。
  2. 根据得到的哈希值,在位数组中把对应下标的值置为 1。

我们再来看一下,当我们需要判断一个元素是否存在于布隆过滤器的时候,会进行哪些操作:

  1. 对给定元素再次进行相同的哈希计算;
  2. 得到值之后判断位数组中的每个元素是否都为 1,如果值都为 1,那么说明这个值在布隆过滤器中,如果存在一个值不为 1,说明该元素不在布隆过滤器中。

然后,一定会出现这样一种情况:不同的字符串可能哈希出来的位置相同。 (可以适当增加位数组大小或者调整我们的哈希函数来降低概率)

缓存击穿

什么是缓存击穿

缓存击穿是指在缓存系统中,某个被大量访问的热点数据在缓存中的有效期刚好到期,而此时大量并发请求同时过来访问该数据,由于缓存中已无此数据,这些请求就会同时绕过缓存直接去访问数据库,从而导致数据库瞬间承受巨大的查询压力,可能会影响数据库甚至整个系统的正常运行。

解决方案

常见的解决方案有两种:

互斥锁

互斥锁的解决思路就是在Redis进行缓存重建时,拿到一个互斥锁,其他请求拿不到这个锁就是乖乖等待锁的释放。

逻辑过期

逻辑过期的解决思路如下:

在存入redis的value中增加一个字段,该字段为过期时间加上x分钟,通过计算就知道这个数据是否逻辑上过期,事实上没过期一直存在redis中。

在redis进行缓存重建的时候,会另开一个线程进行重建并拿到互斥锁,其他线程拿不到数据想要缓存重建时也拿不到锁,那就直接返回旧数据。

互斥锁方案:由于保证了互斥性,所以数据一致,且实现简单,因为仅仅只需要加一把锁而已,也没其他的事情需要操心,所以没有额外的内存消耗,缺点在于有锁就有死锁问题的发生,且只能串行执行性能肯定受到影响

逻辑过期方案: 线程读取过程中不需要等待,性能好,有一个额外的线程持有锁去进行重构数据,但是在重构数据完成前,其他的线程只能返回之前的数据,且实现起来麻烦

缓存雪崩

什么是缓存雪崩?

实际上,缓存雪崩描述的就是这样一个简单的场景:缓存在同一时间大面积的失效,后面的请求都直接落到了数据库上,造成数据库短时间内承受大量请求。 这就好比雪崩一样,摧枯拉朽之势,数据库的压力可想而知,可能直接就被这么多请求弄宕机了。

举个例子:系统的缓存模块出了问题比如宕机导致不可用。造成系统的所有访问,都要走数据库。

还有一种缓存雪崩的场景是:有一些被大量访问数据(热点缓存)在某一时刻大面积失效,导致对应的请求直接落到了数据库上。 这样的情况,有下面几种解决办法:

举个例子 :秒杀开始 12 个小时之前,我们统一存放了一批商品到 Redis 中,设置的缓存过期时间也是 12 个小时,那么秒杀开始的时候,这些秒杀的商品的访问直接就失效了。导致的情况就是,相应的请求直接就落到了数据库上,就像雪崩一样可怕。

解决办法

(1)给不同的Key的TTL添加随机值(推荐)
        操作简单,当我们在做缓存预热的时候,就有可能在同一时间批量插入大量的数据,
那么如果它们的TTL都一样的话就可能出现大量key同时过期的情况!!!
所以我们需要在设置过期时间TTL的时候,定义一个范围,追加该范围内的一个随机数。
(2)利用Redis集群提高服务的可用性
        使用集群提高可靠性
(3)给缓存业务添加降级限流策略
        微服务的知识
(4)给业务添加多级缓存  
        请求到达浏览器,nginx可以做缓存,未命中找Redis,再未命中找JVM,最后到数据库......

 总结

我个人感觉redis的缓存穿透和缓存击穿有部分是类似,而缓存击穿和缓存雪崩又有一部分是类似的

缓存穿透和缓存击穿的大至区别

  • 缓存击穿指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。
  • 缓存穿透指查询一个根本不存在的数据,缓存层和存储层都不会命中,每次都会去请求数据库,若有大量这样的请求,可能会导致数据库压力过大甚至崩溃。

缓存击穿和缓存雪崩的大至区别

  • 涉及数据范围缓存击穿主要针对的是单个热点数据,是由于单个关键数据的缓存过期,大量请求同时访问这一数据而引发问题;而缓存雪崩涉及的是大量数据,是大量缓存数据在同一时间或短时间内集体失效,导致大量请求冲向数据库。
  • 引发原因侧重:缓存击穿更多是因为某个热点数据的缓存时间设置不当,或者在缓存过期的瞬间有大量并发请求访问;缓存雪崩除了可能因为缓存时间设置不合理外,还可能由于缓存服务器故障、大量数据同时更新等原因导致大量缓存数据同时失效
  • 问题表现形式缓存击穿是大量请求集中访问某一个特定数据缓存雪崩是大量请求分散地访问多个不同的数据,但这些数据的缓存同时失效,导致整体请求流量对数据库造成巨大冲击。

文章参考

Redis的缓存穿透、缓存雪崩、缓存击穿问题及有效解决方案_缓存雪崩和缓存穿透问题解决方案-CSDN博客

相关文章:

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

缓存穿透 什么是缓存穿透 缓存穿透说简单点就是大量请求的 key 根本不存在于缓存中,导致请求直接到了数据库上,根本没有经过缓存这一层。举个例子:某个黑客故意制造我们缓存中不存在的 key 发起大量请求,导致大量请求落到数据库…...

Java 并发编程:synchronized 与 Lock 的区别

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Java 并发编程:synchronized 与 Lock 的深度对比 在 Java 多线程编程中,同步机制是保证线程安全的核心手段。synchronized 关键字和 …...

12组复古暖色调旅行电影摄影照片调色Lightroom预设 12 Warm Vintage Film Lightroom Presets

使用这 12 种暖色复古胶片 Lightroom 预设来转换您的照片,旨在将经典胶片的永恒精髓带入您的数字编辑中。每个预设都经过精心制作,以唤起丰富的色彩、微妙的颗粒和怀旧的色调。 这些预设非常适合寻求复古魅力和现代精度融合的摄影师,将毫不费…...

WebSocket:实现实时通信的利器

在现代Web应用中,实时通信变得越来越重要。无论是聊天应用、在线游戏,还是实时数据推送,传统的HTTP请求-响应模式已经无法满足需求。WebSocket作为一种全双工通信协议,应运而生,成为实现实时通信的利器。本文将深入探讨…...

小谈java内存马

基础知识 (代码功底不好,就找ai优化了一下) Java内存马是一种利用Java虚拟机(JVM)动态特性(如类加载机制、反射技术等)在内存中注入恶意代码的攻击手段。它不需要在磁盘上写入文件&#xff0c…...

wordpress自定the_category的输出结构

通过WordPress的过滤器the_category来自定义输出内容。方法很简单,但是很实用。以下是一个示例代码: function custom_the_category($thelist, $separator , $parents ) {// 获取当前文章的所有分类$categories get_the_category();if (empty($categ…...

Flink深入浅出之01:应用场景、基本架构、部署模式

Flink 1️⃣ 一 、知识要点 📖 1. Flink简介 Apache Flink — Stateful Computations over Data StreamsApache Flink 是一个分布式大数据处理引擎,可对有界数据流和无界数据流进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以…...

react脚手架(creat-react-app)

安装 react脚手架 React官方提供的脚手架工程Create React App:https://github.com/facebook/create-react-app npm install create-react-app -g 全局安装 create-react-app my-react (my-react为项目名称,可以自定义) cd my-react 启动项目&#xff1a…...

TypeError: Cannot set properties of undefined (setting ‘xxx‘)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...

使用Node.js从零搭建DeepSeek本地部署(Express框架、Ollama)

目录 1.安装Node.js和npm2.初始化项目3.安装Ollama4.下载DeepSeek模型5.创建Node.js服务器6.运行服务器7.Web UI对话-Chrome插件-Page Assist 1.安装Node.js和npm 首先确保我们机器上已经安装了Node.js和npm。如果未安装,可以通过以下链接下载并安装适合我们操作系…...

考网络安全工程师证要什么条件才能考?

在当今数字化时代,网络安全问题日益凸显,网络安全工程师成为了一个备受瞩目的职业。许多有志于投身这一行业的学子或职场人士,都希望通过考取网络安全工程师证书来提升自己的专业素养和竞争力。那么,考网络安全工程师证需要具备哪…...

【情境领导者】评估情境——准备度水平

本系列是看了《情境领导者》一书,结合自己工作的实践经验所做的学习笔记。 在文章【情境领导者】评估情境——什么是准备度-CSDN博客我们提到准备度是由能力和意愿两部分组成的。 准备度水平 而我们要怎么去评估准备度呢?准备度水平是指人们在每项工作中…...

一套企业级智能制造云MES系统源码, vue-element-plus-admin+springboot

MES应该是继ERP之后制造企业信息化最热门的管理软件,它适应产品个性化与敏捷化制造需求,满足生产过程精益管理而产生和发展起来的信息系统。 作为企业实现数字化与智能化的核心支撑技术与重要组成部分,MES在帮助制造企业走向数字化、智能化等…...

蓝桥杯备考:动态规划线性dp之传球游戏

按照动态规划的做题顺序 step1&#xff1a;定义状态表示 f[i][j] 表示 第i次传递给了第j号时一共有多少种方案 step2: 推到状压公式 step3:初始化 step4:最终结果实际上就是f[m][1] #include <iostream> #include <cstring> using namespace std;const int N …...

网络编程 day05

网络编程 day05 12. SQL 数据库概念常用数据库MySQL与SQLite的区别 SQL基础SQL语句使用基本语句的使用—命令行操作sqlite3系统命令sqlite命令 sqlite3编程—函数接口 13. setsockopt&#xff1a;设置套接字属性 12. SQL 数据库 概念 数据库是“按照数据结构来组织、存储和管理…...

Excel中COUNTIF用法解析

COUNTIF 是 Excel 中一个非常实用的函数&#xff0c;用于统计满足某个条件的单元格数量。它的基本语法如下&#xff1a; 基本语法 COUNTIF(范围, 条件) 范围&#xff1a;需要统计的单元格区域&#xff0c;例如 A1:A10 或整列 A:A。 条件&#xff1a;用于判断哪些单元格需要被…...

使用XShell连接RHEL9并配置yum阿里源

目录 1.先在终端查看本地IP 2.打开XShell进行连接 方法一&#xff1a; 方法二&#xff1a; 3.关闭防火墙及SElinux 4.更改主机名为node2 5.修改YUM源为阿里源&#xff08;将系统中国外的yum文件换成国内的阿里镜像文件&#xff09; 1.找到本机的yum配置文件 2.删除原有…...

FPGA时序约束的几种方法

一,时钟约束 时钟约束是最基本的一个约束,因为FPGA工具是不知道你要跑多高的频率的,你必要要告诉工具你要跑的时钟频率。时钟约束也就是经常看到的Fmax,因为Fmax是针对“最差劲路径”,也就是说,如果该“最差劲路径”得到好成绩,那些不是最差劲的路径的成绩当然比…...

C# 在Excel中插入和操作切片器-详解

目录 使用工具 C# 在Excel中插入切片器 插入切片器到透视表 插入切片器到表格 C# 在Excel中修改切片器 C# 删除Excel中的切片器 切片器&#xff08;Slicer&#xff09;是Excel中的一个强大工具&#xff0c;它提供了直观且交互式的方式来过滤数据。通过切片器&#xff0c;…...

新编大学应用英语综合教程3 U校园全套参考答案

获取全套答案&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/abaa0338724e...

Kubernetes中的 iptables 规则介绍

#作者&#xff1a;邓伟 文章目录 一、Kubernetes 网络模型概述二、iptables 基础知识三、Kubernetes 中的 iptables 应用四、查看和调试 iptables 规则五、总结 在 Kubernetes 集群中&#xff0c;iptables 是一个核心组件&#xff0c; 用于实现服务发现和网络策略。iptables 通…...

操作系统 2.2-多进程总体实现

多个进程使用CPU的图像 如何使用CPU呢&#xff1f; 通过让程序执行起来来使用CPU。 如何充分利用CPU呢&#xff1f; 通过启动多个程序&#xff0c;交替执行来充分利用CPU。 启动了的程序就是进程&#xff0c;所以是多个进程推进 操作系统需要记录这些进程&#xff0c;并按照…...

基于SeaShips数据集的yolov8训练教程

之前已经试过在yolov3和faster-rcnn上训练SeaShips数据集&#xff0c;本次在yolov8上进行训练。 yolov8的训练有两种方式&#xff0c;一种是在mmdetection框架下下载mmyolo运行&#xff0c;另一种是直接采用ultralytics。本文两种方法都会介绍。 目录 一、mmyolo 1.1 创建环…...

【时间序列聚类】从数据中发现隐藏的模式

在大数据时代&#xff0c;时间序列数据无处不在。无论是股票市场的价格波动、天气的变化趋势&#xff0c;还是用户的点击行为&#xff0c;这些数据都随着时间推移而产生。然而&#xff0c;面对海量的时间序列数据&#xff0c;我们如何从中提取有价值的信息&#xff1f;答案之一…...

在线研讨会 | 加速游戏和AI应用,全面认识Imagination DXTP GPU

近日&#xff0c;Imagination宣布推出 Imagination DXTP GPU IP&#xff0c;该产品重新定义了智能手机和其他功耗受限设备的图形和计算加速。它专为高效的效率而设计&#xff0c;能够提供运行AI、游戏和用户界面体验所需的性能&#xff0c;确保这些体验可以全天候流畅且持续地运…...

百度SEO关键词布局从堆砌到场景化的转型指南

百度SEO关键词布局&#xff1a;从“堆砌”到“场景化”的转型指南 引言 在搜索引擎优化&#xff08;SEO&#xff09;领域&#xff0c;关键词布局一直是核心策略之一。然而&#xff0c;随着搜索引擎算法的不断升级和用户需求的多样化&#xff0c;传统的“关键词堆砌”策略已经…...

数据库基础练习1

目录 1.创建数据库和表 2.插入数据 创建一个数据库&#xff0c;在数据库种创建一张叫heros的表&#xff0c;在表中插入几个四大名著的角色&#xff1a; 1.创建数据库和表 #创建表 CREATE DATABASE db_test;#查看创建的数据库 show databases; #使用db_test数据库 USE db_te…...

UVC for USBCamera in Android

基于UVC 协议&#xff0c;完成USBCamera 开发 文章目录 一、目的&#xff1a;二、USBCamera 技术实现方案难点 三、误区&#xff1a;四、基础补充、资源参考架构图了解Camera相关专栏零散知识了解部分相机源码参考&#xff0c;学习API使用&#xff0c;梳理流程&#xff0c;偏应…...

C++学习之路,从0到精通的征途:入门基础

目录 一.C的第一个程序 二.命名空间 1.namespace的价值 2.命名空间的定义 3.命名空间使用 三.C的输入与输出 1.<iostream> 2.流 3.std(standard) 四.缺省参数 1.缺省参数的定义 2.全缺省/半缺省 3.声明与定义 ​五.函数重载 1.参数个数不同 2.参数类型不…...

RSA-OAEP填充方案与定时攻击防护

目录 RSA-OAEP填充方案与定时攻击防护一、前言二、RSA 与 OAEP 填充方案概述2.1 RSA 加密算法基础2.2 OAEP 填充方案的引入2.3 数学公式推导 三、定时攻击原理与防护策略3.1 定时攻击的基本原理3.2 防护定时攻击的策略 四、基于 Python 的 RSA-OAEP 与定时攻击防护实现五、完整…...

探索高性能AI识别和边缘计算 | NVIDIA Jetson Orin Nano 8GB 开发套件测评总结

# NVIDIA Jetson Orin Nano 8GB测评&#xff1a;当边缘计算遇上"性能暴徒"&#xff0c;树莓派看了想转行 引言&#xff1a;比咖啡机还小的"AI超算"&#xff0c;却让开发者集体沸腾 2025年的某个深夜&#xff0c;程序员老王盯着工位上巴掌大的NVIDIA Jets…...

Seata

Seata是一款开源的分布式事务解决方案&#xff0c;由阿里巴巴发起并维护&#xff0c;旨在帮助应用程序管理和协调分布式事务。以下是对Seata的详细介绍&#xff1a; 一、概述 Seata致力于提供高性能和简单易用的分布式事务服务&#xff0c;它为用户提供了AT、TCC、SAGA和XA等…...

STM32之Unix时间戳

时间戳按秒计时&#xff0c;可转换成年月日时分。32有符号存储时间戳&#xff0c;2的32次/2-1到2038年&#xff0c;STM32是2的32次方-1&#xff0c;到2106年溢出。所有时区共用一个时间戳秒计数器&#xff0c;在伦敦和北京都是0&#xff0c;不同经度加上小时即可。...

告别手动复制粘贴:可定时自动备份的实用软件解析

软件介绍 此前不少小伙伴都在找备份工具&#xff0c;其实复制文件用fastcopy就可以&#xff0c;但它需要手动操作。 今天介绍的简易备份工具则能实现定时备份。 这款软件有个小问题&#xff0c;当源目录和目标目录路径太长时&#xff0c;【立即备份】按钮可能会超出软件界面范…...

Django下防御Race Condition

目录 漏洞原因 环境搭建 复现 A.无锁无事务时的竞争攻击 B.无锁有事务时的竞争攻击 防御 A.悲观锁加事务防御 B.乐观锁加事务防御 总结 漏洞原因 Race Condition 发生在多个执行实体&#xff08;如线程、进程&#xff09;同时访问共享资源时&#xff0c;由于执行顺序…...

python从入门到精通(二十三):文件操作和目录管理难度分级练习题

文件操作和目录管理 文件操作基础难度1. 简单文件写入2. 简单文件读取3. 追加内容到文件 中级难度4. 逐行读取文件并统计行数5. 读取文件并提取特定信息6. 复制文件内容到新文件 高级难度7. 处理二进制文件8. 批量文件处理9. 日志文件分析 参考答案示例1. 简单文件写入2. 简单文…...

揭开AI-OPS 的神秘面纱 第二讲-技术架构与选型分析 -- 数据采集层技术架构与组件选型分析

基于上一讲预设的架构图&#xff0c;深入讨论各个组件所涉及的技术架构、原理以及选型策略。我将逐层、逐组件地展开分析&#xff0c;并侧重于使用数据指标进行技术选型的对比。 我们从 数据采集层 开始&#xff0c;进行最细粒度的组件分析和技术选型比对。 数据采集层技术架构…...

jupyter配置多个核心

CMD输入 先创建虚拟环境 "D:\Program Files\Python37\python.exe" -m venv myenv激活虚拟环境 myenv\Scripts\activate"D:\Program Files\Python37\python.exe" -m pip install ipykernel "D:\Program Files\Python37\python.exe" -m ipykern…...

如何优化FFmpeg拉流性能及避坑指南

FFmpeg作为流媒体处理的核心工具&#xff0c;其拉流性能直接影响直播/点播体验。本文从协议优化、硬件加速、网络策略三大维度切入&#xff0c;结合实战案例与高频踩坑点&#xff0c;助你突破性能瓶颈&#xff01; 一、性能优化进阶&#xff1a;从协议到硬件的全链路调优 协议选…...

机器学习:线性回归,梯度下降,多元线性回归

线性回归模型 (Linear Regression Model) 梯度下降算法 (Gradient Descent Algorithm) 的数学公式 多元线性回归&#xff08;Multiple Linear Regression&#xff09;...

笔记五:C语言编译链接

Faye&#xff1a;孤独让我们与我们所爱的人相处的每个瞬间都无比珍贵&#xff0c;让我们的回忆价值千金。它还驱使你去寻找那些你在我身边找不到的东西。 ---------《寻找天堂》 目录 一、编译和链接的介绍 1.1 程序的翻译环境和执行环境 1.1.1 翻译环境 1.1.2 运行环境 …...

SpringUI:打造高质量Web交互设计的首选元件库

SpringUI作为一个专为Web设计与开发领域打造的高质量交互元件库&#xff0c;确实为设计师和开发者提供了极大的便利。以下是对SpringUI及其提供的各类元件的详细解读和一些建议&#xff1a; SpringUI概述 SpringUI集合了一系列预制的、高质量的交互组件&#xff0c;旨在帮助设…...

LeetCode - 神经网络的 反向传播(Sigmoid + MSE) 教程

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/146085177 使用 Python + Numpy,设计带有 Sigmoid 激活函数 的神经网络,实现反向传播以更新神经元的权重和偏置。函数输入:特征向量(Input)、真实标签(Label)、初始…...

Elastic如何获取当前系统时间

文章目录 1. 使用 _ingest.timestamp 在 Ingest Pipeline 中获取当前时间2. 使用 Painless Script 获取当前时间3. 使用 now 关键字在查询中获取当前时间4. 使用 date 类型字段的默认值5. 使用 Kibana 的 Dev Tools 查看当前时间6. 使用 date 聚合获取当前时间7. 使用 Elastics…...

腾讯云对象存储服务(COS)

腾讯云对象存储服务&#xff08;COS&#xff09; 安全、可扩展、低成本的云存储解决方案 腾讯云 对象存储服务&#xff08;COS&#xff0c;Cloud Object Storage&#xff09; 是一种高可靠、高性能、可扩展的云存储服务&#xff0c;专为海量非结构化数据&#xff08;如图片、…...

力扣35.搜索插入位置-二分查找

class Solution:def searchInsert(self, nums: List[int], target: int) -> int:# 初始化左右指针left, right 0, len(nums) - 1# 当左指针小于等于右指针时&#xff0c;继续循环while left < right:# 计算中间位置mid (left right) // 2# 如果中间元素等于目标值&…...

SSLScan实战指南:全面检测SSL/TLS安全配置

SSLScan是一款开源的SSL/TLS安全扫描工具,用于检测服务器的加密协议、支持的加密套件、证书信息以及潜在的安全漏洞。本指南将详细介绍如何安装、使用SSLScan,并结合实战案例帮助您全面评估服务器的安全性。 一、SSLScan简介 功能特性: 检测支持的SSL/TLS协议版本(如TLS 1.…...

Linux 进程管理

一.进程 1.基本介绍 在Linux中每一个执行的程序都称之为进程&#xff0c;每一个进程都会分配一个进程号&#xff08;PID&#xff09;。进程以前台和后台两种方式存在&#xff0c;前台进程就是我们可以在屏幕上操作的&#xff0c;后台进程我们无法在屏幕上看到。 程序是静态的…...

mfc140u.dll是什么?当程序遭遇mfc140u.dll问题:快速恢复正常的秘诀

在使用Windows操作系统运行某些软件时&#xff0c;不少用户会遇到令人头疼的mfc140u.dll文件丢失错误。mfc140u.dll这个错误一旦出现&#xff0c;往往导致相关程序无法正常启动或运行&#xff0c;给用户带来诸多不便。这天的这篇文章将给大家分析mfc140u.dll是什么&#xff1f;…...

日新F1、瑞研F600P 干线光纤熔接(熔接损耗最大0.03DB)

Ⅰ. 设备特性对比与实测验证 1. 日新F1&#xff08;两马达&#xff09;极限参数 切割角度&#xff1a;必须≤0.3&#xff08;双边累计误差&#xff1c;0.6&#xff09; ▶ 实测案例&#xff1a;切割0.35时&#xff0c;损耗波动达0.05-0.08dB&#xff08;超干线标准&#xff09…...