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

Redis中的哨兵(Sentinel)

 

  上篇文章我们讲述了Redis中的主从复制(Redis分布式系统中的主从复制-CSDN博客),本篇文章针对主从复制中的问题引出Redis中的哨兵,希望本篇文章会对你有所帮助。

文章目录

一、引入哨兵机制

二、基本概念

三、主从复制的问题

四、哨兵自动恢复主节点故障

五、哨兵重新选取主节点的流程(原理)


🙋‍♂️ 作者:@Ggggggtm 🙋‍♂️

👀 专栏:Redis 👀

💥 标题:Redis中的哨兵💥

❣️ 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 ❣️

一、引入哨兵机制

  Redis中的主从复制最大的问题就是在主节点上。现在我们具体来分析一下其原因。假如现在主从复制当中,有一个从节点因为网络抖动或者其他原因与主节点断开连接,这时候对其他的节点影响大吗?实际上影响并不大的,Redis的客户端可以从其他的从节点正常读取数据,并且也不影响对主节点的读和写操作。等网络稳定,或者该从节点再次主动执行slaveof来接入该主从复制结构,最坏的情况也就是全量复制同步数据。

  如果主节点挂了呢?主节点挂了从节点就迷茫了。虽然能够提供读操作,但是从节点不能自动的升级成主节点,也就是不能替换原有主节点对应的角色。此时就需要程序猿/运维手工的恢复主节点。通常情况下,管理员需要手动选择一个从节点作为新的主节点,并更新其他从节点的配置,将其设置为新主节点的从节点(slaveof masterhost masterport)。这个过程可能涉及到修改配置文件、执行命令等操作。 过程繁杂,且有可能出现意外情况。

  针对上述的情况,Redis引入了哨兵(Sentinel)机制。Redis Sentinel是一个分布式系统,用于监控Redis集群中各个节点的状态,并在发现故障时自动进行故障转移。它可以自动识别主节点的故障,并将一个从节点晋升为主节点,从而实现故障恢复的自动化。通过Redis Sentinel的监控和自动化故障处理机制,可以大大提高系统的可用性和稳定性,降低故障恢复的时间成本,从而保证系统能够在面对各种故障和异常情况时依然能够正常运行。

  下面我们来详细学习Redis Sentinel中的细节。

二、基本概念

  由于对 Redis的许多概念都有不同的名词解释,所以在介绍Redis Sentinel之前,先对几个名词概念进行必要的说明,如表所示。 

  注意:哨兵节点是一个单独的进程,此功能并不是集成在主从复制当中的。哨兵机制就是通过哨兵节点来解决 Redis 主节点挂掉的问题的方法。哨兵节点不负责存储数据,主要是用来监控监控 Redis 主从服务器是否正常运行,并且在主节点挂掉后能够自动完成切换主节点,也就是故障转移工作。

  考虑到单个哨兵节点挂掉时,监控与自动切换主节点无法正常完成,因此通常会部署多个哨兵节点构成一个集合。这样即使一个哨兵节点挂掉,其他哨兵节点仍然可以监控 Redis 主节点的状态,并且当主节点出现故障时,其他哨兵节点可以通过投票来选举出一个新的主节点。这种方式确保了 Redis 集群的高可用性和容错性。

 Redis Sentinel 是 Redis 提供的高可用实现方案。在实际的生产环境中,它扮演着关键的角色,为系统提供了稳定可靠的服务。在面对可能的故障时,Redis Sentinel能够迅速识别问题并采取必要的措施,确保系统持续运行。

三、主从复制的问题

   Redis的主从复制模式可以将主节点的数据改变同步给从节点,这样从节点就可以起到两个作用:

  • 第一,作为主节点的一个备份,一旦主节点出了故障不可达的情况,从节点可以作为后备“顶”上来,并且保证数据尽量不丢失(主从复制表现为最终一致性)。
  • 第二,从节点可以分担主节点上的读压力,让主节点只承担写请求的处理,将所有的读请求负载均衡到各个从节点上。

  但是主从复制模式并不是万能的,它同样遗留下以下几个问题:

  • 主节点发生故障时,进行主备切换的过程是复杂的,需要完全的人工参与,导致故障恢复时间无法保障。
  • 主节点可以将读压力分散出去,但写压力/存储压力是无法被分担的,还是受到单机的限制。其中第一个问题是高可用问题,即 Redis哨兵主要解决的问题。第二个问题是属于存储分布式的问题,留给Redis集群去解决,本篇文章我们集中讨论第一个问题。

  接下来我们来还原以下主从复制模式中的主节点出现问题的场景。

   现有如下主从复制结构:

  有如下突发情况:大半夜Redis主从复制中的主节点挂掉了,领导打电话让你赶快重新配置一下。此时的你一脸高兴(我上早八)的从床上爬起来,打开电脑连接到公司的电脑。然后你选择先看看主节点还能不能抢救了,好不好抢救。如果主节点这边是啥原因挂的不好定位,或者原因知道但是短时间难以解决,就需要挑一个从节点设置为新的主节点让Redis保持正常工作。然后你开始做了:

  1. 把选中的从节点通过slaveof no one,与主节点断开主从关系,自己成为一个主节点;
  2. 把其他的从节点修改slaveof的主节点ip port,连上新的主节点;
  3. 告知客户端(修改客户端的配置),让客户端能够连接新的主节点,用来完成修改数据的操作。
  4. 再去产看之前的主节点。当之前的挂了的主节点修好了之后,在修改一下该主节点的配置文件,就可以作为一个新的从节点挂到这组机器中。

  上述过程顺利的话你可能一个小时就完成了。但是在顺利的情况下你勉强能接受,不顺利呢?半夜的你的状态、心情等等因素,即使你的状态不错,但凡涉及到人工去修改,就会有概率出错!可能会导致问题更加严重。半夜起来修改不说,结果弄的一团糟~~

  其次你在修改的工程中,Redis客户端的写操作怎么办呢?主节点都挂了还要怎么写啊!显然上述的过程不是很靠谱。

四、哨兵自动恢复主节点故障

  当主节点出现故障时,Redis Sentinel能自动完成故障发现和故障转移,并通知应用方从而实现真正的高可用。

  Redis Sentinel是一个分布式架构,其中包含若干个Sentinel(哨兵)节点和Redis数据节点(主从节点),每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当它发现节点不可达时,会对节点做下线表示。如果下线的是主节点,它还会和其他的Sentinel节点进行“协商”,当大多数Sentinel节点对主节点不可达这个结论达成共识之后,它们会在内部“选举”出一个领导节点来完成自动故障转移的工作,同时将这个变化实时通知给Redis应用方。整个过程是完全自动的,不需要人工介入。

  具体来说,Redis的主从节点负责存储数据和处理客户端请求,Sentinel节点则负责监控和管理Redis数据节点的状态以及执行故障转移等任务。客户端可以连接到任何一个Redis节点,通过Sentinel节点来获取集群的状态信息和执行故障转移等操作,从而实现对Redis集群的管理和监控。

  需要注意的是,在这种架构下Redis数据节点和Sentinel节点都是独立部署的,它们之间没有直接的数据交互,而是通过网络进行通信。注意:上图中的监控是指这些进程之间会建立tcp长连接,通过这样的长连接定期发送心跳包。这种分布式架构使得整个系统更具弹性和容错能力,即使某个物理节点出现故障,也不会影响整个系统的正常运行。

  上图我们也能看出:  Redis Sentinel引入多个Sentinel节点,系统具备了更强的可靠性和容错能力。当有多个Sentinel节点同时监控集群时,即使部分Sentinel节点出现故障或无法正常工作,仍然可以保证集群的监控和管理功能不受影响。为了确保在进行故障检测和故障转移时能够达成多数派的共识,建议使用奇数个Sentinel节点(后续会解释)。

   现在Sentinel节点监控现有的redis master 和 slave,如果是slave挂了,并没有任何关系。但是主节点挂了, Redis Sentinel就要进行故障转移了。针对主节点故障转移流程大致如下∶

  • 主节点故障,从节点同步连接中断,主从复制停止。
  • 哨兵节点通过定期监控发现主节点出现故障。哨兵节点与其他哨兵节点进行协商,达成多数认同主节点故障的共识。这步主要是防止该情况:出故障的不是主节点,而是发现故障的哨兵节点或者是因为网络问题,该情况经常发生于哨兵节点的网络被孤立的场景下。‘
  • 哨兵节点之间使用Raft算法选举出一个领导角色,由该节点负责后续的故障转移工作。
  • 哨兵领导者开始执行故障转移:从节点中选择一个作为新主节点,让其他从节点同步新主节点。该工作也就是前面我们说到的人工操作恢复故障的工作。
  • 哨兵节点会自动的通知客户端程序告知新的主节点是谁,并且后续客户端再进行写操作,就会针对新的主节点进行操作了。

  通过上述我们也能分析出redis哨兵核心功能:

  1. 监控数据节点,主要是主节点;
  2. 自动的故障转移;
  3. 通知客户端。

  注意redis 哨兵节点只有一个也是可以的。如果哨兵节点只有一个,它自身也是容易出现问题的。万一这个哨兵节点挂了,后续redis主节点也挂了,就无法进行自动的恢复过程了。

  出现误判的概率也比较高,毕竟网络传数据是容易出现抖动或者延迟或者丢包的。如果只有一个哨兵节点出现上述因网络问题造成误判之后,影响就比较大。

五、哨兵重新选取主节点的流程(原理)

  假定当前环境有三个哨兵(sentenal1, sentenal2, sentenal3),一个主节点(redis-master),两个从节点(redis-slave1, redis-slave2)。当主节点出现故障,就会触发重新一系列过程。

  哨兵重新选取主节点的前提是多个哨兵节点确定主节点挂掉了。注意:是多个哨兵节点判断主节点挂掉了。怎么就多个哨兵节点可以都判断该主节点挂掉了呢?因此在 Redis 哨兵(Sentinel)中,sdown 表示主观宕机(Subjectively Down),odown 表示客观宕机(Objectively Down)。

  sdown 是指单个哨兵节点认为某个 master 节点宕机了。具体来说,如果一个哨兵节点向 master 发送 ping 命令(心跳机制),在超过指定的毫秒数之后没有收到有效回复,那么这个哨兵就会主观认为 master 宕机,将其标记为 sdown。

  odown 则是指多个哨兵节点都认为某个 master 节点宕机了。当一个哨兵将 master 标记为 sdown 后,它会在指定时间内,每秒向其他哨兵发送 i消息来询问它们是否也认为该 master 是 sdown。如果收到该消息的其他哨兵中,有达到法定票数的数量(可配置的最小数量)的哨兵都认为那个 master 是 sdown,那么就可以认为是 odown,即客观认为 master 宕机。

  多个哨兵需要判定主节点是否挂了,这样才更加安全。但是有的时候可能因为特殊情况,比如主节点仍然工作正常,但是哨兵节点自己网络出问题了,无法访问到主节点了。此时就可能会使该哨兵节点认为主节点下线而出现误判。使用投票的方式来确定主节点是否真的挂了是更稳妥的做法,需要多个哨兵都认为主节点挂了,即票数>=法定票数之后才会真的认为主节点是挂了。

  确定master客观下线后,要让多个哨兵节点选出一个leader节点,由这个leader负责选一个从节点作为新的主节点。怎么选出一个leader呢?

  Raft 算法是一种被广泛应用于分布式系统中的共识算法,用于确保系统中的多个节点能够达成一致的决策。在 Redis 哨兵集群中,Raft 算法通常用于选举领导者(leader),以协调故障转移过程。

假设我们有三个哨兵节点:S1、S2 和 S3。在故障转移过程中,哨兵节点之间会相互发起选举,以下是大致的选举流程:

  1. 拉票请求发起:每个哨兵节点都会向其他所有哨兵节点发起拉票请求,表达自己的候选人意愿。例如,哨兵节点 A(S1)会给哨兵节点 B(S2)和哨兵节点 C(S3)发送拉票请求,哨兵节点 B(S2)会给哨兵节点 A(S1)和哨兵节点 C(S3)发送拉票请求,以此类推。
  2. 投票响应:收到拉票请求的哨兵节点会根据自身的情况作出投票决定,并回复投票响应。每个哨兵节点只有一票,并且只能投给一个候选人。如果收到的是第一次拉票请求,那么响应方将投票给拉票方。如果已经给其他候选人投过票,那么就不再投票。
  3. 选举结果确认:在一轮投票结束后,如果有一个候选人收到了超过半数的选票,那么它将自动成为领导者。例如,如果 S1 和 S2 都投给了 S3,那么 S3 将成为领导者。如果没有候选人获得半数以上的选票,则会重新进行选举。
  4. 领导者选举完成:新选出的领导者负责挑选一个从节点升级为新的主节点。例如,如果 S3 成为了领导者,它将选择一个从节点升级为新的主节点。其他哨兵节点会观察到新的主节点的出现,从而确认选举过程已经结束

  通过上述流程我们能够看出Raft 算法的核心理念是“先下手为强”,即率先发起拉票请求的候选人更有可能成为领导者。选举的结果可能受到网络延迟的影响,因此选举过程中会有一定的随机性。

  在 Redis 哨兵集群中,确保哨兵节点数量为奇数有助于降低出现平票的可能性,从而减少额外的选举开销。偶数个哨兵节点出现的平票概率相对来说大意是点。这一过程确保了集群在主节点故障时能够快速有效地进行故障转移。

  选出leader后,那么由该leader选出一个从节点作为新的主节点,那么这里问题又来了:选哪个从节点呢?这里也是右挑选规则的:

  •  比较优先级。优先级高(数值小的)的上位,优先级是配置文件中的配置项(slave-priority或者replica-priority );
  • 比较replication offset谁复制的数据多,高的上位。offset 为从节点从主节点这边同步数据的进度。数值越大说明从节点的数据和主节点就越接近;
  • 比较run id ,谁的id 小,谁上位。这个run id生成的大小是随机的。(此时选谁都可以了,随便挑一个)。

  把新的主节点指定好了之后,leader就会控制这个这个节点执行slave no one,成为master。再控制其他节点,执行slave of ,让这些其他节点,以新的 master作为主节点了。

一些注意事项:

  • 哨兵节点数量: 哨兵节点尽量不要只有一个,因为如果唯一的哨兵节点挂了,将会影响系统的可用性。建议至少使用三个哨兵节点,以确保高可用性。
  • 奇数个哨兵节点: 最好将哨兵节点配置为奇数个。这样做有利于选举领导者,因为得票超过半数的概率更高,从而降低了出现平票的可能性。
  • 哨兵节点的角色: 哨兵节点不负责存储数据,它们的主要作用是监控和管理 Redis 主从节点。实际的数据存储仍然由 Redis 主从节点负责。
  • 提高可用性: 哨兵节点和主从复制结合解决了提高系统的可用性的问题,但无法解决数据丢失的问题。在极端情况下(主节点没来得及同步就挂了),可能会发生写入数据丢失的情况,因此需要结合其他机制来确保数据的持久性和一致性。
  • 存储容量限制: 哨兵节点和主从复制不能提高数据的存储容量。当需要存储的数据接近或超过服务器的物理内存时,单纯依靠这种结构将难以满足需求。为了扩展存储容量,需要引入集群架构,如 Redis Cluster,以实现数据的分片和分布式存储。

相关文章:

Redis中的哨兵(Sentinel)

上篇文章我们讲述了Redis中的主从复制(Redis分布式系统中的主从复制-CSDN博客),本篇文章针对主从复制中的问题引出Redis中的哨兵,希望本篇文章会对你有所帮助。 文章目录 一、引入哨兵机制 二、基本概念 三、主从复制的问题 四、哨…...

产业创新研究杂志产业创新研究杂志社产业创新研究编辑部2024年第12期目录

高质量发展 如何在新一轮产业链变革中平稳应对挑战 王宏利; 1-3《产业创新研究》投稿:cnqikantg126.com 基于ERGM的城市间绿色低碳技术专利转让网络结构及演化研究 吕彦朋;姜军;张宁; 4-6 数字基础设施建设对城市FDI的影响——基于“宽带中国”试点政策…...

网闸(Network Gatekeeper或Security Gateway)

本心、输入输出、结果 文章目录 网闸(Network Gatekeeper或Security Gateway)前言网闸主要功能网闸工作原理网闸使用场景网闸网闸(Network Gatekeeper或Security Gateway) 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 如果觉得本文对你有帮助…...

C#中的字符串

String 在实例方法中string虽然传入的是引用类型 但是修改string 并不是修改原来堆里面的值 而是又重新创建一个堆值 用来然后用方法内的变量指向新的堆值 C# 中的字符串(string 类型)提供了许多有用的方法来处理字符串数据。以下是一些常用的字符…...

docker安装部署elasticsearch7.15.2

docker安装部署elasticsearch7.15.2 1.拉取es镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.2如果不想下载或者镜像拉去太慢可以直接下载文章上面的镜像压缩包 使用镜像解压命令 docker load -i elasticsearch-7-15-2.tar如下图所示就表示镜像解压成…...

Symfony 入门指南:快速安装与基础配置

Symfony 入门指南:快速安装与基础配置 Symfony 是一个强大而灵活的 PHP 框架,广泛应用于构建现代 Web 应用程序。本指南将带您一步一步地了解如何快速安装 Symfony,并完成基本配置,以便您能够开始使用这个强大的框架。 目录 引…...

3.3V升压至5V的AH6922芯片:高效能的SOP8封装解决方案

# 3.3V升压至5V的AH6922芯片:高效能的SOP8封装解决方案 在当今快速发展的电子设备领域,对于电源管理的需求日益增长。特别是对于便携式产品和手持设备,一个高效、稳定且体积小巧的升压解决方案变得至关重要。本文将介绍一款专为这些需求设计…...

赋能未来教育,3DCAT助力深圳鹏程技师学院打造5G+XR实训室

随着国家对教育行业的重视,实训室建设已成为推动教育现代化的关键。《教育信息化2.0行动计划》、《职业教育示范性虚拟仿真实训基地建设指南》等政策文件,明确指出了加强虚拟仿真实训教学环境建设的重要性。 在这一大背景下,教育行业对于实训…...

力扣141环形链表问题|快慢指针算法详细推理,判断链表是否有环|龟兔赛跑算法

做题链接 目录 前言: 一、算法推导: 1.假设有环并且一定会相遇,那么一定是在环内相遇,且是快指针追上慢指针。 2.有环就一定会相遇吗?快指针是每次跳两步,有没有可能把慢指针跳过去? 3.那一定…...

React 常见的报错及解决方法

1、Warning: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons(无效的钩子调用。钩子只能在函数组件的内部调用。这可能是由于以下原因之一) 原因&#x…...

更新服务器nginx 1.26.1版本

今天在官网下载了nginx1的1.26.1版本,使用gpt的脚本想直接覆盖安装,脚本如下 #!/bin/bash# 设置变量 NGINX_VERSION"1.26.1" TAR_FILE"nginx-$NGINX_VERSION.tar.gz" SRC_DIR"nginx-$NGINX_VERSION"# 检查是否存在tar包 …...

JAVA代码审计JAVA0基础学习(需要WEB基础知识)DAY2

JAVA 在 SQL执行当中 分为3种写法: JDBC注入分析 Mybatis注入分析 Hibernate注入分析 JDBC 模式不安全JAVA代码示例部分特征 定义了一个 sql 参数 直接让用户填入id的内容 一个最简单的SQL语句就被执行了 使用安全语句却并没有被执行 Mybatis: #…...

SpringBoot整合elasticsearch-java

一、依赖 系统使用的是ElasticSearch8.2.0 <dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.1.0</version> </dependency> 二、配置 1、yml文件配置 elastics…...

网络服务与应用

一、 文件传输 FTP 1、FTP采用典型的C/S架构&#xff08;即服务器端和客户端模型&#xff09;&#xff0c;客户端与服务器端建立TCP连接之后即可实现文件的上传、下载。 2、FTP传输过程 1&#xff09;、主动模式&#xff08;POST&#xff09;&#xff1a;入站连接 2&#x…...

Git项目如何配置,如何上传至GitHub

Git项目配置并上传至GitHub的详细步骤如下&#xff1a; 一、准备工作 创建GitHub账号&#xff1a; 访问GitHub官网&#xff0c;点击“Sign up”注册新账号。填写相关信息&#xff0c;包括用户名、邮箱和密码&#xff0c;完成账号创建。安装Git客户端&#xff1a; 访问Git官网…...

Python教程(一):环境搭建及PyCharm安装

目录 引言1. Python简介1.1 编译型语言 VS 解释型语言 2. Python的独特之处3. Python应用全览4. Python版本及区别5. 环境搭建5.1 安装Python&#xff1a; 6. 开发工具&#xff08;IDE&#xff09;6.1 PyCharm安装教程6.2 永久使用教程 7. 编写第一个Hello World结语 引言 在当…...

神经网络与注意力机制的权重学习对比:公式探索

神经网络与注意力机制的权重学习对比&#xff1a;公式探索 注意力机制与神经网络权重学习的核心差异 在探讨神经网络与注意力机制的权重学习时&#xff0c;一个核心差异在于它们如何处理输入数据的权重。神经网络通常通过反向传播算法学习权重&#xff0c;而注意力机制则通过学…...

C语言------指针讲解(3)

一、字符指针 在指针中&#xff0c;我们知道有一类指针类型为字符指针char*; int main() {char ch w;char* pc &ch;*pc w;return 0; } 还有一种使用方式如下&#xff1a; 上述代码中&#xff0c;本质是把hello的首字符的地址放到了pstr中。即把一个常量字符串的首字符…...

博客建站 - 常用的公共DNS服务器

国内公共DNS服务 服务器名称首选DNS服务备用DNS服务114 DNS114.114.114.114114.114.115.115阿里 DNS223.5.5.5223.6.6.6腾讯云公共DNS119.29.29.29182.254.116.116百度公共DNS180.76.76.76110.242.68.68 国外公共DNS服务 服务器名称首选DNS服务备用DNS服务备注Google DNS8.8…...

用Redisson的RMap做一个简单的购物车示例

RMap是Redisson提供的一个高级数据结构&#xff0c;它封装了Redis中的Hash数据类型&#xff0c;提供了一个类似Java HashMap的接口。RMap非常适合在需要分布式共享的键值对集合场景中使用&#xff0c;以下是一些典型的应用场景&#xff1a; 分布式缓存&#xff1a; RMap可以用作…...

「12月·长沙」第四届机器人、自动化与智能控制国际会议(ICRAIC 2024)

随着科技的飞速发展&#xff0c;智能机器人在当今社会的重要性愈发凸显。从制造业的自动化生产线&#xff0c;到医疗领域的手术机器人&#xff0c;再到家庭生活中的智能助手&#xff0c;机器人与人工智能的融合正在改变着我们的生产和生活方式。第四届机器人、自动化与智能控制…...

传神社区|数据集合集第7期|法律NLP数据集合集

自从ChatGPT等大型语言模型&#xff08;Large Language Model, LLM&#xff09;出现以来&#xff0c;其类通用人工智能&#xff08;AGI&#xff09;能力引发了自然语言处理&#xff08;NLP&#xff09;领域的新一轮研究和应用浪潮。尤其是ChatGLM、LLaMA等普通开发者都能运行的…...

完美解决Ubuntu的MySQL临时文件夹修改调整

打开终端&#xff0c;输入以下命令 $ sudo -i # 切换root用户 $ systemctl stop mysql.service $ mkdir /home/tmp $ chown root:root /home/tmp $ chmod 1777 /home/tmp $ gedit /etc/mysql/mysql.conf.d/mysqld.cnf以上最后一条命令执行完后&#xff0c;在打开的mysqld.cnf文…...

shell基础编程

初始shell 程序 语言 编程 ---------------------------------- 语言 自然语言:汉语、英语 计算机语言:c语言、c、(java php python go shell) 编译型语言 c c java 解释型语言 php python bash ​ 编译型语言:编译型语言的首先将源代码编译生成机器语言&#xff0c;再由机…...

近期代码报错解决笔记

1.TypeError: ‘bool’ object is not callable 想print("Type of head:", type(entity_emb[head]))&#xff0c;结果报如下错误&#xff1a; 源代码&#xff1a; 因为 print 仍然被当作一个布尔值处理&#xff0c;而不是作为函数调用。这个问题的根源在于 print …...

apache设置ssl代理

<VirtualHost *:8082> ServerName localhost DocumentRoot D:\xampp\htdocs\somgl\dist #证书 SSLProtocol all -SSLv2 SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:3DES SSLEngine on SSLProxyEngine on SSLProxyVerify…...

数据库中单表的查询(select)

单表查询 所有的查找都会得到一张虚拟表 一、 最简单的查询 SELECT 123; SELECT asd; SELECT 11;二、 从表中获取数据 select 字段名,字段名 from 表名 2.1 全字段查询 SELECT sid,sname,birthday,ssex,classid FROM student; SELECT * FROM student; -- 使用*不利于s…...

Spring源码-BeanFactory类关系层级

BeanFactory 访问Spring bean容器的根接口。 这是bean容器的基本客户端视图;例如{link ListableBeanFactory}和{link org.springframework.beans.factory.config。ConfigurableBeanFactory}可用于特定目的。 这个接口是由包含许多bean定义的对象实现的&#xff0c;每个bean定义…...

Electron 结合 Selenium + chromedriver 驱动服务实现浏览器多开

背景 在调研浏览器多开的过程中&#xff0c;electron 有自带的 browserview&#xff0c;webview&#xff0c;但是上面两个受制于 electron 内核版本限制&#xff0c;升级不够灵活&#xff0c;对新版的网页支持可能不及时&#xff0c;甚至不兼容&#xff0c;必须通过发布新的客…...

手持式气象检测设备:便携科技,气象探测

一、手持式气象检测设备&#xff1a;小巧身躯&#xff0c;大能量 手持式气象检测设备&#xff0c;顾名思义&#xff0c;是一种可以手持操作的气象监测工具。它集成了温度、湿度、气压、风速风向等多种传感器&#xff0c;能够实时获取气象数据&#xff0c;并通过显示屏或手机APP…...

shell 发送邮件脚本(免密)

#!/bin/bash ENV$1 TARGET_VERSION$2 TO$3 # SMTP服务器设置 SMTP_SERVER"邮箱服务地址" SMTP_PORT"25"# 邮件信息 FROM"jenkinsy.com" SUBJECT"Deployment Status Notification" BODY$ENV"发布完成&#xff0c;版本 &#xff1a…...

Web动画(lottie篇)

一、Lottie简介 Lottie是一个库&#xff0c;可以解析使用AE制作的动画&#xff08;需要用bodymovin导出为json格式&#xff09;&#xff0c;支持web、ios、android和react native。在web侧&#xff0c;lottie-web库可以解析导出的动画json文件&#xff0c;并将其以svg或者canva…...

昇思25天学习打卡营第20天|CV-ResNet50图像分类

打卡 目录 打卡 图像分类 ResNet网络介绍 数据集准备与加载 可视化部分数据集 残差网络构建 Building Block 结构 代码实现 Bottleneck结构 代码实现 构建ResNet50网络 代码定义 模型训练与评估 可视化模型预测 重点&#xff1a;通过网络层数加深&#xff0c;感知…...

grep: /etc/mysql/my.cnf: 没有那个文件或目录

当你收到 "grep: /etc/mysql/my.cnf: 没有那个文件或目录" 的错误信息时&#xff0c;这意味着你的系统上可能没有默认的 MySQL/MariaDB 配置文件 /etc/mysql/my.cnf。MariaDB 和 MySQL 可能会使用不同的配置文件路径。下面是一些步骤来帮助你找到正确的配置文件&…...

养猫好物|宠物空气净化器是不是智商税?靠谱猫毛空气净化器推荐

宠物空气净化器是不是智商税&#xff1f;宠物空气净化器是否真有其效&#xff0c;是许多由于要不要买空气净化器养宠人心中的疑惑。作为呼吸科医生&#xff0c;我深知良好空气质量对呼吸道健康的重要性&#xff0c;因此建议所有家庭&#xff0c;尤其是养有猫狗等宠物的家庭&…...

【CPS出版】2024年智能计算与数据分析国际学术会议(ICDA 2024,9月6日-8)

为探讨数据科学和计算智能领域的关键问题&#xff0c;促进相关交流&#xff0c;2024年智能计算与数据分析国际学术会议&#xff08;ICDA 2024)将于2024年9月6日-8日在中国青岛召开。 本届会议拟邀请数据分析和计算智能领域的顶级专家、学者和产业界优秀人才&#xff0c;围绕当前…...

AutoGen框架革新:解锁新闻稿写作的新境界

前言 今天带来的仍然是AutoGen基于AssistantAgent和UserProxyAgent的例子&#xff0c;以帮助大家一起消化目前最前卫的AI应用框架。这是一个AIGC最擅长&#xff0c;因为生成新闻稿嘛&#xff0c;同时又需要利用Agent的一个常规Demo。了解LangChain的同学&#xff0c;会通过对比…...

数据结构之队列详解

1.队列的概念以及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFo(Frist in Frist out)的特性 入队列&#xff1a;进行插入才操作的一端称为队尾 出队列&#xff1a;进行删除操作的一…...

[渗透测试] 反序列化漏洞

反序列化漏洞 ​ 序列化&#xff1a;将对象的状态信息转换为可以传输或存储的形式的过程。简单的来说&#xff0c;就是将一个抽象的对象转换成可以传输的字符串 &#xff0c;以特定的形式在进行之间实现跨平台的传输。 序列化大多以字节流、字符串、json串的形式来传输。将对…...

C++ 类型转换 包括C风格的转换、static_cast、const_cast、reinterpret_cast、dynamic_cast、模板特化等

C 类型转换 包括C风格的转换、static_cast、const_cast、reinterpret_cast、dynamic_cast、模板特化等 flyfish 0. 隐式转换&#xff08;Implicit Conversions&#xff09; 隐式转换是编译器自动进行的类型转换&#xff0c;通常在需要将一个类型转换为另一个类型以匹配函数参…...

等保通过标准

等保测评&#xff0c;即信息系统安全等级保护测评&#xff0c;是国家对信息系统安全等级保护的一种评估活动。它涉及到安全管理、安全技术、安全运维等多个方面&#xff0c;旨在评定信息系统是否达到了国家设定的安全等级保护标准。等保测评的通过标准通常会根据信息系统的安全…...

reduceByKey 函数详解

reduceByKey 函数详解 实现原理 reduceByKey 函数主要用于处理分布式数据集。它接收两个操作符作为参数&#xff1a; keySelector&#xff1a;这是一个映射函数&#xff0c;用于从输入元素中提取键。 valueReducer&#xff1a;这是另一个函数&#xff0c;用于将具有相同键的…...

CSI-RS在信道中传输的过程

简单介绍CSI-RS信号生成&#xff0c;在信道中传输和接收的过程 1.载波配置 首先需要配置载波相关的参数 系统带宽和子载波间隔 5G NR中&#xff0c;系统带宽和子载波间隔是两个关键参数&#xff0c;共同决定无线资源的分配和使用 系统带宽 5G NR支持广泛的系统带宽&…...

建造者模式(Builder Pattern)工作原理

文章目录 [toc]建造者模式&#xff08;Builder Pattern&#xff09;工作原理一、基本概念二、主要角色三、工作流程&#xff08;一&#xff09;定义产品&#xff08;二&#xff09;定义抽象建造者&#xff08;三&#xff09;定义具体建造者&#xff08;四&#xff09;定义指挥者…...

Ubuntu22.04安装Go语言的几种方式

在 Ubuntu 22.04 上安装 Go 语言可以通过几种不同的方法&#xff0c;以下是两种常见的安装方法&#xff1a; 方法1&#xff1a;使用 go 官方安装脚本 打开终端。 下载 Go 语言的安装脚本&#xff1a; curl -O https://go.dev/dl/go1.22.5.linux-amd64.tar.gz请检查 Go 官方网…...

Typora笔记上传到CSDN

1.Typora 安装 Typora链接&#xff1a;百度网盘 提取码&#xff1a;b6d1 旧版本是不需要破解的 后来的版本比如1.5.9把放在typora的根目录下就可以了 2.上传到CSDN 步骤 csdn 写文章-使用MD编辑器-导入本地md文件即可 问题 图片没法显示 原因 图片的链接是本地的 当然没法…...

Modbus转BACnet/IP网关BA100-配硬件说明

在现代自动化系统中&#xff0c;不同设备和系统之间的通信至关重要&#xff0c;Modbus和BACnet/IP协议虽然各有优势&#xff0c;但它们之间的直接通信存在障碍。钡铼Modbus转BACnet/IP网关作为连接这两种协议的桥梁&#xff0c;允许不同系统之间的无缝数据交换。 一、Modbus转…...

DjangoRF实战-2-apps-users

1、用户模块 创建一个用户模块子应用&#xff0c;用来管理用户&#xff0c;和认证和授权。 1.1根目录创建apps&#xff0c; 为了使用方便&#xff0c;还需要再pycharm中设置一下资源路径&#xff0c;就可以自动提示 1.2注册子应用 1.3添加应用根目录到环境变量path python导…...

java面试题,有synchronized锁,threadlocal、数据可以设置默认值、把redis中的json转为对象

有面试题&#xff0c;有synchronized锁&#xff0c;threadlocal 一、面试题小记二、加锁synchronized1. 先看代码2. synchronized 讲解2.1. 同步代码块2.2. 同步方法2.3. 锁的选择和影响2.4. 注意事项2.5 锁的操作&#xff0c;手动释放锁&#xff0c;显式地获取锁&#xff08;属…...

Apache Spark:深度解析

文章目录 引言Apache Spark 官网链接Spark 的原理1. 核心组件2. 弹性分布式数据集&#xff08;RDD&#xff09;3. 执行模型 基础使用1. 环境搭建2. 示例代码 高级功能1. DataFrame 和 Dataset2. 机器学习3. 流处理 优缺点优点缺点 结论 引言 Apache Spark 是一个快速、通用、可…...