【Redis分布式】主从复制
🔥个人主页: 中草药
🔥专栏:【中间件】企业级中间件剖析
一、主从复制
在分布式系统之中为了解决单点问题(1、可用性问题,该机器挂掉服务会停止2、性能支持的并发量是有限的)通常会把数据复制多个副本部署在其他服务器,满足故障和负载均衡的要求。
Redis 主从复制(Master-Slave Replication)是一种数据同步机制,允许将一台 Redis 服务器(主节点,Master)的数据复制到其他 Redis 服务器(从节点,Slave)。主从复制在 Redis 中广泛用于数据冗余、读写分离、故障恢复和高可用性架构。
在实际业务场景之中,读操作往往比写操作更加频繁,主从模式,主要是针对“读操作”进行 并发量&可用性的提高
核心概念
主节点(Master)
-
负责处理客户端的写操作(
SET
,DEL
等)。 -
数据变更后,主节点将写命令异步发送给从节点。
-
每个 Redis 实例默认都是主节点。
从节点(Slave)
-
复制主节点的数据,默认只处理读操作(
GET
等)。 -
可以配置为级联复制(从节点作为其他从节点的主节点)。
-
一个主节点可以有多个从节点。
可读
默认情况下,从节点使用 slave-read-only=yes 配置为只读模式。即使修改此处为no,允许从节点进行写操作修改,由于复制只能从主节点到从节点,对于从节点的任何修改主节点都无法感知,修改从节点会造成主从数据不一致。所以建议线上不要修改从节点的只读模式。
传输延迟
主从节点一般部署在不同机器上,复制时的网络延迟就成为需要考虑的问题,Redis为我们提供了 repl-disable-tcp-nodelay 参数用于控制是否关闭 TCP_NODELAY(TCP内部的nagle算法),默认为 no,即开启 tcp-nodelay功能,说明如下:
当关闭时,主节点产生的命令数据无论大小都会及时地发送给从节点,这样主从之间延迟会变小,但增加了网络带宽的消耗。适用于主从之间的网络环境良好的场景,如同机房部署。
当开启时,主节点会合并较小的TCP 数据包从而节省带宽。默认发送时间间隔取决于Linux的内核,一般默认为 40 毫秒。这种配置节省了带宽但增大主从之间的延迟。适用于主从网络环境复杂的场景,如跨机房部署。
拓扑结构
一主一从
最简单的模式,用于数据备份和读写分离。
一主多从
主节点处理写操作,多个从节点分担读负载。
树状结构(级联复制)
从节点可以作为其他从节点的主节点,降低主节点压力。
例如:Master -> Slave1 -> Slave2
。
Slave1仍然是从节点,无法进行写操作,只是作为了slave2节点同步数据的来源
此结构主节点无需 一主多从 结构那么高的网卡带宽,但是一旦数据进行修改,同步的传输延时比其要更长
配置主从复制
1. 静态配置(redis.conf)
在从节点的配置文件中添加:
slaveof <master-ip> <master-port> # 指定主节点地址
masterauth <password> # 如果主节点有密码
注意:daemonsize要设置为 yes(允许后台运行)
2. 动态配置(运行时命令)
通过 Redis 命令动态设置主从关系:
# 在从节点上执行:
SLAVEOF 192.168.1.100 6379 # 将该节点设置为某个主节点的从节点
SLAVEOF NO ONE # 停止复制,恢复为主节点
示例:一主一从
# 主节点(端口 6379)
redis-server --port 6379# 从节点(端口 6380)
redis-server --port 6380 --slaveof 127.0.0.1 6379
配置成功后
注意:
如果使用 service redis-server start 启动的 redis 则同样要使用 service redis-server stop 来终止redis ,使用kill -9 会自动重启
基本流程
配置从节点:在从节点(slave 6380
)上通过 slaveof 127.0.0.1 6379
命令配置主节点(master 6379
)的 IP 和端口 ,让从节点知道主节点位置。
保存主节点信息:从节点接收配置命令后,保存主节点的地址信息,如 IP、端口等,为后续连接做准备。
主从建立连接:从节点根据保存的主节点信息,主动与主节点建立网络连接-TCP,搭建起主从通信链路。(TCP的三次握手是为了通信双方能正常读写数据)
发送 ping 命令:连接建立后,从节点向主节点发送 ping 命令,用于检测主节点是否可达,以及检查网络连接状态是否正常 。
权限验证:若主节点设置了访问密码,从节点需进行权限验证,提供正确密码才能继续后续操作,保证数据安全。
以上都为准备操作,下面为主从复制的主要操作
同步数据集:验证通过后,从节点向主节点发送同步请求,主节点执行 bgsave
命令生成 RDB 文件并发送给从节点,从节点接收并加载 RDB 文件,将数据恢复到自身,实现数据的初次同步 。
命令持续复制:初次同步完成后,主节点会将后续接收到的写命令持续发送给从节点,从节点执行这些命令,保证主从节点数据的实时一致性。
数据同步psync
redis提供了psync命令,去完成数据同步的过程,此命令不需要我们手动执行,再建立好主从关系之后,会自动执行
PSYNC replicationid offset
- 从节点发送 psync 命令给主节点,replid 和 offset 的默认值分别是?和 -1.
- 主节点根据 psync 参数和自身数据情况决定响应结果:
- 如果回复 +FULLRESYNC replid offset,则从节点需要进行全量复制流程。
- 如果回复 +CONTINUE,从节点进行部分复制流程。
- 如果回复 -ERR,说明 Redis 主节点版本过低,不支持 psync 命令。从节点可以使用 sync 命令进行全量复制。
- psync 一般不需要手动执行. Redis 会在主从复制模式下自动调用执行.
- sync 会阻塞 redis server 处理其他请求. psync 则不会.
查看主从结构信息
info replication
断开主从结构
断开与主节点的复制关系,不会丢弃原有数据,只是无法再从主节点上获取到数据变化
此处的修改是临时性的,如果重新启动该服务,仍然会按照最初在配置文件设置的内容来建立主从关系
replicationid
也叫 replid
,是用于标识主节点身份的唯一标识符 ,是主节点自动生成的(从节点升级为主节点也会生成,且主节点每次重启生成的replicationid都是不同的)。描述数据的来源
其中,replicationid2 一般是用不到,可以用于因网络波动的原因导致从节点升级为主节点生成的replicationid会取代原先的位置,而此时replicationid2会记录之前的replicationid,后续可以据此重新建立主从关系--哨兵机制会自动完成这个过程
offset
即复制偏移量 ,以字节为单位。
主节点每处理一个写命令,就将命令的字节长度累加到 master_repl_offset
,它表示主节点已向从节点发送了多少字节的数据,体现主节点的写入进度 ;
从节点接收并执行主节点传来的写命令后,也会累加更新 slave_repl_offset
,代表从节点的复制进度 。
这两个参数共同描述了一个数据集,当这两个数据相同,表示数据状态是一致的,并且同步状态良好
主从复制分为两个阶段:全量复制(初次同步)和 增量复制(持续同步)。
全量复制(Full Resynchronization)
当从节点首次连接主节点或复制关系中断后需要重新同步时触发:
1) 从节点发送 psync 命令给主节点进行数据同步,由于是第一次进行复制,从节点没有主节点的运行 ID 和复制偏移量,所以发送 psync ? -1。
2) 主节点根据命令,解析出要进行全量复制,回复 +FULLRESYNC 响应。
3) 从节点接收主节点的运行信息进行保存。
4) 主节点执行 bgsave 进行 RDB 文件的持久化。(防止传输的RDB文件为旧文件)
5) 主节点发送 RDB 文件给从节点,从节点保存 RDB 数据到本地硬盘。
6) 主节点将从生成 RDB 到接收完成期间执行的写命令,写入缓冲区中,等从节点保存完 RDB 文件后,主节点再将缓冲区内的数据补发给从节点,补发的数据仍然按照 rdb 的二进制格式追加写入到收到的 rdb 文件中.保持主从一致性。
7) 从节点清空自身原有旧数据。
8) 从节点加载 RDB 文件得到与主节点一致的数据。
9) 如果从节点加载 RDB 完成之后,并且开启了 AOF 持久化功能,它会进行 bgrewrite 操作,得到最近的 AOF 文件。
全量复制的无磁盘复制 (diskless)
默认情况下,进行全量复制需要主节点生成 RDB 文件到主节点的磁盘中,再把磁盘上的 RDB 文件通过发送给从节点。
Redis 从 2.8.18 版本开始支持无磁盘复制。主节点在执行 RDB 生成流程时,不会生成 RDB 文件到磁盘中了,而是直接把生成的 RDB 数据通过网络发送给从节点。这样就节省了一系列的写硬盘和读硬盘的操作开销(但实际上,由于全量复制需要大规模数据的网络传输,因此整个操作还是比较重的)。
注意 部分资料会把 runId 和replicationid混淆,但是通过源码阅读可知,
run id
是一个随机生成的,他的主要作用是支持哨兵机制的,并不在主从复制功能起到一定作用
部分复制(Partial Resynchronization)
1)当主从节点之间出现网络中断时,如果超过 repl-timeout 时间,主节点会认为从节点故障并终端复制连接。
2)主从连接中断期间主节点依然响应命令,但这些复制命令都因网络中断无法及时发送给从节点,所以暂时将这些命令滞留在repl-backing-buffer(是内存中一个基于数组构成的环形队列,会记录一段时间修改的数据,随着时间的推移会删除之前的旧数据)复制积压缓冲区中。
3)当主从节点网络恢复后,从节点再次连上主节点。
4)从节点将之前保存的 replicationId 和 复制偏移量作为 psync 的参数发送给主节点,请求进行部分复制。
5)主节点接到 psync 请求后,进行必要的验证。随后根据 offset 去复制积压缓冲区查找合适的数据,并响应 +CONTINUE 给从节点。
6)主节点将需要从节点同步的数据发送给从节点,最终完成一致性。
实时复制
全量复制完成后,主节点持续将新的写命令发送给从节点:
实时同步
主节点每执行一个写命令,就异步将该命令发送给所有从节点。从节点接收并执行这些命令,保持数据同步。
在进行实时复制的时候,需要保证连接处于可用状态
心跳包机制
主节点:默认,每隔 10s 给从节点发送一个 ping 命令。从节点收到就返回 pong
从节点:默认,每隔 1s 就给主节点发起一个特定的请求,就会上报当前从节点复制数据的进度 (offset)
关键配置参数
参数 | 说明 |
---|---|
repl-backlog-size | 复制积压缓冲区大小(影响断线后增量复制能力) |
repl-timeout | 复制超时时间(默认 60 秒) |
min-slaves-to-write | 主节点至少需要 N 个从节点连接才允许写操作 |
min-slaves-max-lag | 从节点最大延迟时间(秒) |
局限性
异步复制
主从节点数据同步是异步的,从节点数据可能短暂落后(最终一致性)。且当从节点数量增多,复制数据的延时会非常明显
主节点单点故障
主节点宕机后,从节点不能自动升级,需手动切换从节点为主节点,非常繁琐(需配合 Sentinel 或 Cluster 实现自动故障转移)。
Redis的哨兵机制--自动对挂了的主节点进行替换
补充
主从节点断开连接的情况有两种
1)主动修改redis的组成结构,通过slave no one,这种情况 从节点会自动升级为主节点
2)主节点挂掉后,需要通过人工干预
欲变世界,先变其身。 ——圣雄甘地
🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀
以上,就是本期的全部内容啦,若有错误疏忽希望各位大佬及时指出💐
制作不易,希望能对各位提供微小的帮助,可否留下你免费的赞呢🌸
相关文章:
【Redis分布式】主从复制
🔥个人主页: 中草药 🔥专栏:【中间件】企业级中间件剖析 一、主从复制 在分布式系统之中为了解决单点问题(1、可用性问题,该机器挂掉服务会停止2、性能支持的并发量是有限的)通常会把数据复制多…...
Node.js心得笔记
npm init 可用npm 来调试node项目 浏览器中的顶级对象时window <ref *1> Object [global] { global: [Circular *1], clearImmediate: [Function: clearImmediate], setImmediate: [Function: setImmediate] { [Symbol(nodejs.util.promisify.custom)]: [Getter] }, cl…...
多智能体空域协同中的伦理博弈与系统调停
在多智能体系统(MAS)广泛应用于低空飞行调度、应急响应与城市管理的背景下,AI之间的“协同”不仅是算法效率问题,更是伦理角色之间的权责动态博弈。尤其在高频互动、任务冲突、资源抢占等复杂场景中,智能体不再是“工具…...
面试中系统化地解答系统设计题:通用方法论
目录 一、明确需求(Clarify Requirements) (一)理解业务背景 (二)功能性需求(Functional Requirements) 1. 分析目标 2. 功能需求分类 A. 用户交互类功能 B. 数据处理类功能 C. 管理与运维类功能 D. 外部系统交互类功能 示例场景详解 3. 捕捉隐藏需求的技巧…...
kotlin中 热流 vs 冷流 的本质区别
🔥 冷流(Cold Flow) vs 热流(Hot Flow)区别 特性冷流(Cold Flow)热流(Hot Flow)数据生产时机每次 collect 才开始执行启动时就开始生产、始终运行生命周期与 collect 者…...
机器视觉开发-打开摄像头
以下是使用Python和OpenCV打开摄像头的最简单实现: import cv2# 打开默认摄像头(通常是0) cap cv2.VideoCapture(0)# 检查摄像头是否成功打开 if not cap.isOpened():print("无法打开摄像头")exit()print("摄像头已打开 - 按…...
Rerank详解
疑惑一 我对rag的流程理解是。后端首先建立embedding后的向量数据库,用户提问使用相同的embedding模型进行向量化,使用阈值控制相似度找出前topk个数据。然后rerank,将rerank的结果打包成prompt返回给大模型进行解答。我对于rerank的过程不是…...
深度探索DeepSeek:从架构设计到性能优化的实战指南
深度解码DeepSeek:从架构设计到工业级部署的全链路优化实践 引言:大模型时代的工程挑战 在人工智能技术进入工业化落地阶段的今天,大模型训练与推理的工程化能力已成为衡量企业技术实力的重要标尺。DeepSeek作为当前业界领先的超大规模语言…...
d202551
目录 一、175. 组合两个表 - 力扣(LeetCode) 二、511. 游戏玩法分析 I - 力扣(LeetCode) 三、1204. 最后一个能进入巴士的人 - 力扣(LeetCode) 一、175. 组合两个表 - 力扣(LeetCode…...
(C题|社交媒体平台用户分析问题)2025年第二十二届五一数学建模竞赛(五一杯/五一赛)解题思路|完整代码论文集合
我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…...
计网_PPP协议
2024.10.15:beokayy计算机网络学习笔记 PPP协议 PPP协议的特点PPP协议应满足的需求(了解)PPP协议的组成(PPP协议有三个组成部分) PPP协议的帧格式PPP协议的工作状态 ISP指的是运营商,比如中国联通、中国电信…...
Mem0.ai研究团队开发的全新记忆架构系统“Mem0”正式发布
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
二叉树删除结点详细代码
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h>typedef int data_t; typedef struct _node {data_t data;struct _node* left;struct _node* right; }node_t;int bst_create(node_t**, data_t);//函数声明BST创建 int bst…...
PyTorch线性代数操作详解:点积、矩阵乘法、范数与轴求和
本文通过代码示例详细讲解PyTorch中常用的线性代数操作,包括点积、矩阵乘法、范数计算以及按轴求和等操作,帮助读者掌握张量运算的核心方法。 1. 点积运算 点积(Dot Product)是两个向量对应元素相乘后求和的结果。 实现代码&…...
Java SE(6)——类和对象
1.初始面向对象 1.1 什么是面向对象 Java是一门纯面向对象的编程语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交换来完成一件事情 1.2 面向过程…...
Kubernetes(k8s)的API Server 组件原理与结合生产实战教程
一、API Server 架构深度解析 1. 核心架构设计 二、生产环境安全加固实战 1. 认证(Authentication) 2. 授权(Authorization) 3. 准入控制(Admission Control) 三、性能优化与调参 1. 关键启动参数 四…...
Java面试高频问题(31-33)
三十一、服务网格:东西向流量治理与故障注入 服务网格架构分层 mermaid graph BT subgraph Control Plane APilot --> BEnvoy Sidecar CMixer --> B DCitadel --> B end subgraph Data Plane B --> E服务A B --> F服务B B --> G服务C end 核心能…...
VSCode开发调试Python入门实践(Windows10)
我的Windows10上的python环境是免安装直接解压的Python3.8.x老版本,可参见《Windows下Python3.8环境快速安装部署。 1. 安装VSCode 在Windows 10系统上安装Visual Studio Code(VS Code)是一个简单的过程,以下是详细的安装方法与…...
C++——入门基础(2)
文章目录 一、前言二、C入门2.1 缺省参数2.2 函数重载2.2.1 参数类型不同2.2.1.1 整体参数类型不同2.2.1.2 参数类型顺序不同 2.2.2 参数个数不同2.2.3 避坑注意2.2.3.1无参与有参2.2.3.2 返回值不同 2.3 引用2.3.1 引用的概念2.3.2引用的结构2.3.3 引用的特点2.3.4引用的作用2…...
【MySQL】复合查询与内外连接
目录 一、复合查询 1、基本查询回顾: 2、多表查询: 3、自连接: 4、子查询: 单列子查询 多行子查询: 多列子查询: 在from语句中使用子查询: 5、合并查询: union࿱…...
第3篇:请求参数处理与数据校验
在 Web 开发中,请求参数处理与数据校验是保障系统稳定性的第一道防线。本文将深入探讨 Egg.js 框架中参数处理的完整解决方案,涵盖常规参数获取、高效校验方案、文件流处理等核心功能,并分享企业级项目中的最佳实践。 一、多场景参数获取策略…...
Android JIT编译:adb shell cmd package compile选项
Android JIT编译:adb shell cmd package compile选项 例如: adb shell cmd package compile -m speed -f --full 包名 配置参数指令说明: compile [-r COMPILATION_REASON] [-m COMPILER_FILTER] [-p PRIORITY] [-f] [--primary-dex] …...
排序算法——冒泡排序
一、介绍 「冒泡排序bubblesort」通过连续地比较与交换相邻元素实现排序。这个过程就像气泡从底部升到顶部一样,因此得名冒泡排序。 冒泡过程可以利用元素交换操作来模拟:从数组最左端开始向右遍历,依次比较相邻元素大小,如果“左…...
文献阅读篇#5:5月一区好文阅读,BFA-YOLO,用于建筑信息建模!(上)
期刊简介:《Advanced Engineering Informatics》创刊于2002年,由Elsevier Ltd出版商出版,出版周期Quarterly。该刊已被SCIE数据库收录,在中科院最新升级版分区表中,该刊分区信息为大类学科工程技术1区,2023…...
工行手机银行安全吗?在应用商店下载工商银行安全吗?
现在很多的人都会用手机银行,其中工行的使用几率也是比较高的,但大家在使用的过程中就会比较关心使用工行手机银行是否安全。如果直接在应用商店下载,是否有安全保障? 工行的手机银行会拥有较高的保障,从技术到服务都可…...
python如何word转pdf
在Python中,将Word文档(.docx或.doc)转换为PDF可以通过多种库实现。以下是几种常见的方法及详细步骤: 方法1:使用 python-docx comtypes(仅Windows,需安装Word) 适用于Windows系统…...
在阿里云 Ubuntu 24.04 上部署 RabbitMQ:一篇实战指南
前言 RabbitMQ 是业界常用的开源消息中间件,支持 AMQP 协议,易于部署、高可用、插件丰富。本文以阿里云 ECS 上运行的 Ubuntu 24.04 LTS 为例,手把手带你完成 RabbitMQ 从仓库配置到运行的全流程,并分享在国内环境下常见的坑与对应解决方案。 环境概况 操作系统:Ubuntu …...
Linux Shell 重定向与管道符号(>, >>, |)的实现机制
文章目录 Linux Shell 重定向与管道符号(>, >>, |)的实现机制一、重定向基础:dup2() 的核心作用二、输出重定向的实现原理>(覆盖重定向)>>(追加重定向) 三、| 管道符的实现原…...
GitHub 趋势日报 (2025年04月30日)
本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1hacksider/Deep-Live-Camreal time face swap and one-click video deepfake with only a single image⭐ 1686⭐ 54925Python2Qwe…...
计算机操作系统知识集合
主要来自小林coding 硬件结构 cpu位宽 如果用 32 位 CPU 去加和两个 64 位大小的数字,就需要把这 2 个 64 位的数字分成 2 个低位 32 位数字和 2 个高位 32 位数字来计算,先加个两个低位的 32 位数字,算出进位,然后加和两个高位…...
PostgreSQL数据类型
数据类型 数值类型 整数类型 SMALLINT 小范围整数,取值范围:-32768 ~ 32767 INT(INTEGER) 普通大小整数,取值范围:-2147483648 ~ 2147483647 浮点数类型 REAL 6位十进制数字精度 NUMERIC(m, n) 任意精度…...
在Linux中,KVM和Docker在Linux虚拟化中的区别是什么?
KVM(Kernel-based Virtual Machine)和Docker是Linux环境中两种不同的虚拟化技术,它们在实现原理、资源隔离程度、应用场景等方面存在显著区别: 实现原理与技术层级 KVM:KVM是一种基于硬件辅助虚拟化的全虚拟化技术&a…...
【docker学习笔记】如何删除镜像启动默认命令
一些镜像会在它打镜像时,加入一些默认的启动命令,可以通过docker inspect \<image id\>来查看Entrypoint。如下图,docker run启动时,会默认执行 "python3 -m vllm.entrypoints.openai.api_server" 如果不想执行&…...
c语言 39.0625转为16进制
c语言 39.0625转为16进制 寄存器的4~15对应整数部分 39为整数部分 39 (10进制) 0x27(16进制) 寄存器的0~3对应小数部分 0.0625为小数部分 0.0626 1/16 则0~3位十六进制值应为 0x1 39.06250…...
【阿里云大模型高级工程师ACP习题集】2.8 部署模型
习题集: 以下关于直接调用模型(无需部署)的说法,错误的是?【单选题】 A. 无需部署模型,只需简单调用API B. 按token量计费,无需担心模型部署的资源消耗 C. 可随意调用,没有任何限制 D. 适合业务初期或中小规模场景 使用vLLM部署模型时,若出现端口被占用的情况,以下做…...
【进阶】--函数栈帧的创建和销毁详解
目录 一.函数栈帧的概念 二.理解函数栈帧能让我们解决什么问题 三.相关寄存器和汇编指令知识点补充 四.函数栈帧的创建和销毁 4.1.调用堆栈 4.2.函数栈帧的创建 4.3 函数栈帧的销毁 一.函数栈帧的概念 --在C语言中,函数栈帧是指在函数调用过程中,…...
猫,为什么是猫?
英语单词 cat,意为猫: cat n.猫 根据首字母象形原则,通常我们喜欢将首字母C,解释为猫爪,C的形象,通常可解释为字母K的右侧的中间凹陷部分,K | <,也就是 C 和 < 相通&#…...
数字智慧方案6169丨智慧医院后勤管理解决方案(58页PPT)(文末有下载方式)
资料解读:智慧医院后勤管理解决方案 详细资料请看本解读文章的最后内容。 在当今万物互联的时代,传统医院后勤管理模式逐渐暴露出诸多弊端,已难以适应医院集团化发展的需求。这份智慧医院后勤管理解决方案资料,深入剖析了传统管理…...
经济学和奥地利学派的起源
(一)经济学和奥地利学派的起源: 早期思想: 亚当斯密被认为是现代经济学的鼻祖,但早期的亚里士多德、柏拉图以及中国的《管子》等著作也包含经济学思想,但更偏向财政学。 亚当斯密之前的学者: 坎…...
Linux安全清理删除目录bash脚本
直接写清除目录命令可能会因为一时手抖导致删除重要目录 rm -rf是个危险的命令,我写了bash脚本,放在环境变量目录下可以当系统命令来用 这里是单线程的,如果需要更高的性能,需要加入多线程的支持。 1.实现功能 清理目录的子内容…...
C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 17)
🎁个人主页:工藤新一 🔍系列专栏:C面向对象(类和对象篇) 🌟心中的天空之城,终会照亮我前方的路 🎉欢迎大家点赞👍评论📝收藏⭐文章 文章目录 二…...
Lucene并不是只有倒排索引一种数据结构,支持多种数据结构
Lucene 的核心机制确实以**倒排索引(Inverted Index)**为核心,但它并不是“全部”都依赖倒排索引。Lucene 的索引结构中还包含其他辅助数据结构,用于支持不同的查询场景。以下是详细的解释: 1. 核心机制:倒…...
使用Docker一键安装SigLens:简单快捷的日志分析解决方案
在当今复杂的IT环境中,高效的日志管理和分析变得越来越重要。SigLens作为一款强大的开源日志分析工具,为开发者和运维人员提供了直观、高效的日志处理体验。本文将介绍如何使用Docker快速安装SigLens,让您在几分钟内就能开始进行日志分析。 为什么选择Docker安装SigLens? Do…...
【Linux】线程池和线程补充内容
个人主页~ 线程池 一、线程池简介单例模式线程池简介 二、单例模式线程池的实现1、ThreadPool.hpp2、Task.hpp3、main.cpp 三、其他常见锁读写锁 一、线程池简介 池化技术我们并不陌生,我们在前面的文章中实现过进程池,这里线程池的作用也是先申请资源交…...
vue3内置组件Suspense的使用
Suspense 实验性功能<Suspense> 是一项实验性功能。它不一定会最终成为稳定功能,并且在稳定之前相关 API 也可能会发生变化 <Suspense> 是一个内置组件,用来在组件树中协调对异步依赖的处理。它让我们可以在组件树上层等待下层的多个嵌套异…...
怪物猎人:世界-冰原10000+mod整合包5月最新更新!
700A大全套精美服装 800M大全套精美服装 3月31日更新 新增 新武器 新特效MOD 当前共计5800MOD整合包 好看的发型mod 实用的功能mod 炫酷的武器mod 新服装新特效新武器实用模组美化,等。 1月14日更新 新增皮肤MOD 500 当前共计2000MOD 1月16日更新 新增超…...
题解:洛谷 CF2091E Interesting Ratio
思路推导 我们先对 32 32 32 和 96 96 96 进行二进制拆分。 相同部分(用 α \alpha α 表示): 5 5 5 个 2 2 2。 不同部分(用 β \beta β 表示): 1 1 1 和 3 3 3。 gcd ( 32 , 96 ) \gcd(32,9…...
PETR和位置编码
PETR和位置编码 petr检测网络中有2种类型的位置编码。 正弦编码和petr论文提出的3D Position Embedding。transformer模块输入除了qkv,还有query_pos和key_pos。这里重点记录下query_pos和key_pos的生成 query pos的生成 先定义reference_points, shape为(n_query…...
《社交类应用开发:React Native与Flutter的抉择》
社交类应用以令人目不暇接的速度更新迭代。新功能不断涌现,从更智能的算法推荐到多样化的互动形式,从增强的隐私保护到跨平台的无缝体验,每一次更新都旨在满足用户日益增长且多变的需求。面对如此高频的更新需求,选择合适的跨端框…...
多模态大语言模型arxiv论文略读(五十三)
Red Teaming GPT-4V: Are GPT-4V Safe Against Uni/Multi-Modal Jailbreak Attacks? ➡️ 论文标题:Red Teaming GPT-4V: Are GPT-4V Safe Against Uni/Multi-Modal Jailbreak Attacks? ➡️ 论文作者:Shuo Chen, Zhen Han, Bailan He, Zifeng Ding, …...