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

【Redis】Redis的主从复制

文章目录

  • 1. 单点问题
  • 2. 主从模式
    • 2.1 建立复制
    • 2.2 断开复制
  • 3. 拓扑结构
    • 3.1 三种结构
    • 3.2 数据同步
    • 3.3 复制流程
      • 3.3.1 psync运行流程
      • 3.3.2 全量复制
      • 3.3.3 部分复制
      • 3.3.4 实时复制

在这里插入图片描述

1. 单点问题

单点问题:某个服务器程序,只有一个节点(只搞一个物理服务器,来部署这个服务器程序,机器挂了,服务就中断了),可用性难以保证、支持的并发量有限

在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他服务器,满⾜故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制的功能,实现了相同数据的多个Redis副本。

复制功能是高可用Redis的基础,哨兵和集群都是在复制的基础上构建的。

在分布式系统中,希望使用多个服务器来部署redis,存在以下几种方式:

  • 主从模式
  • 主从 + 哨兵
  • 集群模式

2. 主从模式

在若干个redis节点中,有的是“主”节点,有的是“从节点”,从节点上的数据要跟主节点保持一致

redis的主从模式中,从节点上的数据,不允许修改,只能读取数据

由于主从节点上的数据是一致的,所以客户端从哪个节点上读取数据都是可以的,这也就相当于引入了更多的计算资源,支持的并发量也就高了。

主从模式,主要是针对“读操作”进行并发量和可用性的提高;对于写操作,无论是可用性还是并发,都是非常依赖主节点的

2.1 建立复制

在一台服务器上如何建立主从模式呢? - -启动多个redis-server进程

  1. 修改从节点配置文件(端口、后台运行)
  2. 启动进程

在这里插入图片描述

此时,这几个进程之间还没有任何的关联,还需要配置

配置复制的⽅式有以下三种:

  1. 在配置⽂件中加⼊slaveof {masterHost} {masterPort}随Redis启动⽣效。
  2. 在redis-server 启动命令时加⼊--slaveof {masterHost} {masterPort} ⽣效。
  3. 直接使⽤redis命令:slaveof{masterHost} {masterPort}⽣效

在这里插入图片描述
此时,这三个redis-server进程就关联好了

可以使用info replication命令查看

在这里插入图片描述

2.2 断开复制

slaveof 命令不但可以建⽴复制,还可以在从节点执⾏slaveof no one来断开与主节点复制关系。

断开复制主要流程:

  • 断开与主节点复制关系。
  • 从节点晋升为主节点。

从节点断开复制后并不会抛弃原有数据,只是⽆法再获取主节点上的数据变化。
通过slaveof命令还可以实现切换主操作,将当前从节点的数据源切换到另⼀个主节点。执行 slaveof {newMasterIp} {newMasterPort} 命令即可。

切主操作主要流程:

  1. 断开与旧主节点复制关系。
  2. 与新主节点建⽴复制关系。
  3. 删除从节点当前所有数据。
  4. 从新主节点进⾏复制操作。

在这里插入图片描述

安全性

  • 对于数据⽐较重要的节点,主节点会通过设置requirepass参数进⾏密码验证,这时所有的客⼾端访问必须使⽤auth命令实⾏校验。
  • 从节点与主节点的复制连接是通过⼀个特殊标识的客⼾端来完成,因此需要配置从节点的masterauth参数与主节点密码保持⼀致,这样从节点才可以正确地连接到主节点并发起复制流程。

只读

  • 默认情况下,从节点使⽤slave-read-only=yes配置为只读模式。
  • 由于复制只能从主节点到从节点,对于从节点的任何修改主节点都⽆法感知,修改从节点会造成主从数据不⼀致。所以建议线上不要修改从节点的只读模式

传输延迟

  • 主从节点⼀般部署在不同机器上,复制时的⽹络延迟就成为需要考虑的问题,Redis为我们提供了repl-disable-tcp-nodelay 参数⽤于控制是否关闭TCP_NODELAY,默认为no,即开启tcpnodelay 功能,说明如下:
    • 当关闭时,主节点产⽣的命令数据⽆论⼤⼩都会及时地发送给从节点,这样主从之间延迟会变⼩,但增加了⽹络带宽的消耗。适⽤于主从之间的⽹络环境良好的场景,如同机房部署。
    • 当开启时,主节点会合并较⼩的TCP数据包从⽽节省带宽。默认发送时间间隔取决于Linux的内核,⼀般默认为40毫秒。这种配置节省了带宽但增⼤主从之间的延迟。适⽤于主从⽹络环境复杂的场景,如跨机房部署。

3. 拓扑结构

3.1 三种结构

Redis 的复制拓扑结构(即若干节点之间,按照什么样的方式组织连接)可以⽀持单层或多层复制关系,根据拓扑复杂性可以分为以下三种:⼀主⼀从、⼀主多从、树状主从结构

  1. 一主一从结构

⼀主⼀从结构是最简单的复制拓扑结构,⽤于主节点出现宕机时从节点提供故障转移⽀持,如图所⽰
在这里插入图片描述

写命令并发量较⾼且需要持久化时,可以只在从节点上开启AOF,这样既可以保证数据安全性同时也避免了持久化对主节点的性能⼲扰。

但需要注意的是,当主节点关闭持久化功能时,如果主节点宕机要避免⾃动重启操作(因为它没有AOF文件,需要从从节点拉取数据,然后在启动)

  1. 一主多从结构

⼀主多从结构(星形结构)使得应⽤端可以利⽤多个从节点实现读写分离,如图
在这里插入图片描述

对于读⽐重较⼤的场景,可以把读命令负载均衡到不同的从节点上来分担压⼒。同时⼀些耗时的读命令可以指定⼀台专⻔的从节点执⾏,避免破坏整体的稳定性。

对于写并发量较⾼的场景,从节点过多会导致主节点写命令的多次发送从而加重主节点的负载

  1. 树形主从结构

树形主从结构(分层结构)使得从节点不但可以复制主节点数据,同时可以作为其他从节点的主节点继续向下层复制。通过引⼊复制中间层,可以有效降低住系欸按负载和需要传送给从节点的数据量
在这里插入图片描述

数据写⼊节点A之后会同步给B和C节点,B节点进⼀步把数据同步给D和E节点。当主节点需要挂载等多个从节点时为了避免对主节点的性能⼲扰,可以采⽤这种拓扑结构。

缺点:一旦数据修改了,数据同步的延迟是高于第二种方式的

复制流程:
在这里插入图片描述

3.2 数据同步

Redis 使⽤psync命令完成主从数据同步,同步过程分为:全量复制和部分复制

  • 全量复制:⼀般⽤于初次复制场景,Redis早期⽀持的复制功能只有全量复制,它会把主节点全部数据⼀次性发送给从节点,当数据量较⼤时,会对主从节点和⽹络造成很⼤的开销。
  • 部分复制:⽤于处理在主从复制中因⽹络闪断等原因造成的数据丢失场景,当从节点再次连上主节点后,如果条件允许,主节点会补发数据给从节点。因为补发的数据远⼩于全量数据,可以有效避免全量复制的过⾼开销。

从节点负责psync

PSYNC replicationid offset
  • 如果replicationid 设为?并且offset设为-1,此时就是在尝试进⾏全量复制
  • 如果replicationid offset 设为了具体的数值,则是尝试进⾏部分复制

replicationid就是主节点的复制id。

主节点重新启动,或者从节点晋级成主节点,都会⽣成⼀个replicationid.(同⼀个节点,每次重启,⽣成的replicationid也会变化)
从节点在和主节点建⽴连接之后,就会获取到主节点的replicationid

在这里插入图片描述

关于master_replid和master_replid2

  • 每个节点需要记录两组master_replid,这个设定解决的问题场景是这样的:⽐如当前有两个节点A和B,A为master,B为slave,此时B就会记录A的master_replid

  • 如果⽹络出现抖动,B以为A挂了,B自己就会成为主节点,于是B给自己分配了新的master_replid,此时就会使⽤master_replid2来保存之前A的master_replid.

    • 后续如果⽹络恢复了,B就可以根据master_replid2找回之前的主节点
    • 后续如果⽹络没有恢复,B就按照新的master_replid⾃成⼀派,继续处理后续的数据.

offset (偏移量)

参与复制的主从节点都会维护自身复制偏移量

  • 主节点(master)在处理完写⼊命令后,会把命令的字节⻓度做累加记录,统计信息在inforeplication中的master_repl_offset指标中

  • 从节点(slave)每秒钟上报自身的复制偏移量给主节点,因此主节点也会保存从节点的复制偏移量

  • 从节点在接受到主节点发送的命令后,也会累加记录自身的偏移量。统计信息在inforeplication中的slave_repl_offset 指标中

通过对⽐主从节点的复制偏移量,可以判断主从节点数据是否⼀致
在这里插入图片描述

replid+offset共同标识了⼀个"数据集",如果两个节点,他们的replid和offset都相同,则这两个节点上持有的数据,就⼀定相同.

3.3 复制流程

3.3.1 psync运行流程

在这里插入图片描述

  1. 从节点发送psync命令给主节点,replid和offset的默认值分别是?和-1.
  2. 主节点根据psync参数和自身数据情况决定响应结果:
  • 如果回复+FULLRESYNC replid offset,则从节点需要进⾏全量复制流程。
  • 如果回复+CONTINEU,从节点进⾏部分复制流程。
  • 如果回复-ERR,说明Redis主节点版本过低,不⽀持psync命令;从节点可以使⽤sync命令进⾏全量复制。
  • psync⼀般不需要手动执行,Redis会在主从复制模式下自动调用执行.
  • sync会阻塞redis-server处理其他请求,psync则不会

3.3.2 全量复制

全量复制是Redis最早⽀持的复制⽅式,也是主从第⼀次建⽴复制时必须经历的阶段,全量复制的运⾏流程如图所示

在这里插入图片描述

  1. 从节点发送psync命令给主节点进⾏数据同步,由于是第⼀次进⾏复制,从节点没有主节点的运⾏ID和复制偏移量,所以发送psync ? -1
  2. 主节点根据命令,解析出要进⾏全量复制,回复+FULLRESYNC响应。
  3. 从节点接收主节点的运⾏信息进⾏保存(replicationid,offset)
  4. 主节点执⾏bgsave进⾏RDB⽂件的持久化(RDB文件是二进制的,体积更小)
  5. 主节点发送RDB文件给从节点,从节点保存RDB数据到本地硬盘。
  6. 主节点将从生成RDB到接收完成期间执行的写命令,写⼊缓冲区中,等从节点保存完RDB⽂件后,主节点再将缓冲区内的数据补发给从节点,补发的数据仍然按照rdb的⼆进制格式追加写⼊到收到的rdb⽂件中,保持主从⼀致性。
  7. 从节点清空⾃⾝原有旧数据。
  8. 从节点加载RDB⽂件得到与主节点⼀致的数据。
  9. 如果从节点加载RDB完成之后,并且开启了AOF持久化功能,它会进⾏bgrewrite操作,得到最近的AOF⽂件。

有磁盘复制vs⽆磁盘复制(diskless)

  • 默认情况下,进⾏全量复制需要主节点⽣成RDB⽂件到主节点的磁盘中,再把磁盘上的RDB ⽂件发送给从节点.
  • Redis从2.8.18版本开始⽀持⽆磁盘复制,主节点在执⾏RDB⽣成流程时,不会⽣成RDB⽂件到磁盘中了,⽽是直接把⽣成的RDB数据通过⽹络发送给从节点,这样就节省了一系列的写硬盘和读硬盘的操作开销.

3.3.3 部分复制

部分复制主要是Redis针对全量复制的过高开销做出的⼀种优化措施,使⽤psync replicationId offset 命令实现。

当从节点正在复制主节点时,如果出现⽹络闪断或者命令丢失等异常情况时,从节点会向主节点要求补发丢失的命令数据,如果主节点的复制积压缓冲区存在数据则直接发送给从节点,这样就可以保持主从节点复制的⼀致性。

补发的这部分数据⼀般远远⼩于全量数据,所以开销很小
在这里插入图片描述

  1. 当主从节点之间出现⽹络中断时,如果超过repl-timeout时间,主节点会认为从节点故障并终端复制连接。
  2. 主从连接中断期间主节点依然响应命令,但这些复制命令都因⽹络中断⽆法及时发送给从节点,所以暂时将这些命令滞留在复制积压缓冲区中。
  3. 当主从节点⽹络恢复后,从节点再次连上主节点。
  4. 从节点将之前保存的replicationIdoffset作为psync的参数发送给主节点,请求进⾏部分复制。
  5. 主节点接到psync请求后,进⾏必要的验证(进行全量/部分复制)。随后根据offset去复制积压缓冲区查找合适的数据,并响应+CONTINUE给从节点。
  6. 主节点将需要从节点同步的数据发送给从节点,最终完成⼀致性。
  • 复制积压缓冲区是保存在主节点上的⼀个固定⻓度的队列,默认⼤⼩为1MB,当主节点有连接的从节点(slave)时被创建,这时主节点(master)响应写命令时,不但会把命令发送给从节点,还会写⼊复制积压缓冲区
  • 由于缓冲区本质上是先进先出的定⻓队列,所以能实现保存最近已复制数据的功能,⽤于部分复制和复制命令丢失的数据补救。
  • 如果当前从节点需要的数据,已经超出了主节点的积压缓冲区的范围,则⽆法进⾏部分复制,只能全量复制了.

3.3.4 实时复制

主从节点在建⽴复制连接后,主节点会把自己收到的修改操作,通过tcp⻓连接的⽅式,源源不断的传输给从节点。
从节点就会根据这些请求来同时修改自身的数据,从⽽保持和主节点数据的⼀致性。另外,这样的⻓连接,需要通过⼼跳包的⽅式来维护连接状态。(这⾥的⼼跳是指应⽤层⾃⼰实现的⼼跳,⽽不是TCP⾃带的⼼跳)

  1. 主从节点彼此都有⼼跳检测机制,各⾃模拟成对⽅的客⼾端进⾏通信。
  2. 主节点默认每隔10秒对从节点发送ping命令,判断从节点的存活性和连接状态。
  3. 从节点默认每隔1秒向主节点发送replconfack {offset}命令,给主节点上报自身当前的复制偏移量。

如果主节点发现从节点通信延迟超过repl-timeout配置的值(默认60秒),则判定从节点下线,断开复制客⼾端连接;从节点恢复连接后,⼼跳机制继续进⾏。

主从复制的特点:

  1. Redis 通过复制功能实现主节点的多个副本。
  2. 主节点⽤来写,从节点⽤来读,这样做可以降低主节点的访问压⼒
  3. 复制⽀持多种拓扑结构,可以在适当的场景选择合适的拓扑结构。
  4. 复制分为全量复制,部分复制和实时复制。
  5. 主从节点之间通过⼼跳机制保证主从节点通信正常和数据⼀致性。

主从复制的缺点:

  1. 从机多了,复制数据的延时⾮常明显.
  2. 主机挂了,从机不会升级成主机,只能通过⼈⼯⼲预的⽅式恢复(后面引入哨兵机制自动对挂了的节点进行替换)

在这里插入图片描述

相关文章:

【Redis】Redis的主从复制

文章目录 1. 单点问题2. 主从模式2.1 建立复制2.2 断开复制 3. 拓扑结构3.1 三种结构3.2 数据同步3.3 复制流程3.3.1 psync运行流程3.3.2 全量复制3.3.3 部分复制3.3.4 实时复制 1. 单点问题 单点问题:某个服务器程序,只有一个节点(只搞一个…...

趣味编程:四叶草

概述:在万千三叶草中寻觅,只为那一抹独特的四叶草之绿,它象征着幸运与希望。本篇博客主要介绍四叶草的绘制。 1. 效果展示 绘制四叶草的过程是一个动态的过程,因此博客中所展示的为绘制完成的四叶草。 2. 源码展示 #define _CR…...

HTTP 响应状态码总结

一、引言 HTTP 响应状态码是超文本传输协议(HTTP)中服务器对客户端(通常是 Web 浏览器)请求的响应指示。这些状态码是三位数字代码,用于告知客户端请求的结果,包括请求是否成功。响应被分为五个类别&#…...

C语言常见的文件操作函数总结

目录 前言 一、打开和关闭 1.fopen 细节 2.fclos 基本用法示例 二、读写 1.fputc和fgetc 1)fputc 细节 基本用法示例 2)fgetc 细节 基本用法示例 2.fputs和fgets 1)fputs 细节 基本用法示例 2)fgets 细节 基本用法示例 3)puts的使用,以及为什…...

卫宁健康WiNGPT3.0与WiNEX Copilot 2.2:医疗AI创新的双轮驱动分析

引言:医疗AI的双翼时代 在医疗信息化的浪潮中,人工智能技术的深度融入正在重塑整个医疗行业。卫宁健康作为国内医疗健康和卫生领域数字化解决方案的领军企业,持续探索AI技术在医疗场景中的创新应用。2025年5月10日,在第29届中国医院信息网络大会(CHIMA2025)上,卫宁健康…...

【GPT入门】第38课 RAG评估指标概述

这里写自定义目录标题 一、RAG评估指标二、ragas 评估三、trulens 一、RAG评估指标 二、ragas 评估 2.1 ragas介绍 开源地址:https://github.com/explodinggradients/ragas 官方文档:https://docs.ragas.io/en/stable/从文本生成和文本召回两个维度&am…...

深度剖析多模态大模型中的视频编码器算法

写在前面 随着多模态大型语言模型(MLLM)的兴起,AI 理解世界的能力从静态的文本和图像,进一步拓展到了动态的、包含丰富时空信息的视频。视频作为一种承载了动作、交互、场景变化和声音(虽然本文主要聚焦视觉部分)的复杂数据形式,为 MLLM 提供了理解真实世界动态和因果关…...

【递归、搜索与回溯算法】导论

📝前言说明: 本专栏主要记录本人递归、搜索与回溯算法的学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码&#xff…...

《智能网联汽车 自动驾驶功能道路试验方法及要求》 GB/T 44719-2024——解读

目录 1. 适用范围 2. 关键术语 3. 试验条件 3.1 试验道路 3.2 试验车辆 3.3 试验设备 3.4 试验时间 4. 试验方法及要求 4.1 功能激活 4.2 动态驾驶任务执行 4.3 动态驾驶任务后援 4.4 状态提示 5. 附录A(核心环境要素) 6. 实施要点 原文链接…...

path环境变量满了如何处理,分割 PATH 到 Path1 和 Path2

要正确设置 Path1 的值,你需要将现有的 PATH 环境变量 中的部分路径复制到 Path1 和 Path2 中。以下是详细步骤: 步骤 1:获取当前 PATH 的值 打开环境变量窗口: 按 Win R,输入 sysdm.cpl,点击 确定。在 系…...

实战项目1(02)

目录 任务场景一 【sw1和sw2的配置如下】 任务场景二 【sw3的配置】 【sw4-6的配置】 任务场景一 某公司有生产、销售、研发、人事、财务等多个部门,这些部门分别连接在两台交换机(SW1和SW2)上,现要求给每个部门划分相应的V…...

m1 安装 Elasticsearch、ik、kibana

一、下载安装ES 1、下载地址 ES|download 2、安装 将下载的安装包解压到 要安装的文件目录 关闭 ES 的安全模式 本地文本编辑器打开elasticsearch.yml配置文件,将红箭头指的地方 改为 false3、启动 ES 启动命令 进入 ES 的安装目录,进入bin文件目…...

游戏引擎学习第273天:动画预览

回顾并为一天的内容定下基调 。目前我们正在编写角色的移动代码,实际上,我们已经在昨天完成了一个简单的角色跳跃的例子。所以今天的重点是,开始更广泛地讨论动画,因为我们希望对现有的动画进行调整,让它看起来更加令…...

JVM中的安全点是什么,作用又是什么?

JVM中的安全点(Safepoint) 是Java虚拟机设计中的一个关键机制,主要用于协调所有线程的执行状态,以便进行全局操作(如垃圾回收、代码反优化等)。它的核心目标是确保在需要暂停所有线程时,每个线程…...

游戏引擎学习第271天:生成可行走的点

回顾并为今天的内容设定背景 我们昨天开始编写一些游戏逻辑相关的内容,虽然这部分不是最喜欢的领域,更偏好底层引擎开发,但如果要独立完成一款游戏,游戏逻辑也必须亲自处理。所以我们继续完善这部分内容。事实上,接下…...

FlySecAgent:——MCP全自动AI Agent的实战利器

最近,出于对人工智能在网络安全领域应用潜力的浓厚兴趣,我利用闲暇时间进行了深入研究,并成功开发了一款小型轻量化的AI Agent安全客户端FlySecAgent。 什么是 FlySecAgent? 这是一个基于大语言模型和MCP(Model-Contr…...

DAMA车轮图

DAMA车轮图是国际数据管理协会(DAMA International)提出的数据管理知识体系(DMBOK)的图形化表示,它以车轮(同心圆)的形式展示了数据管理的核心领域及其相互关系。以下是基于用户提供的关键词对D…...

使用vue3-seamless-scroll实现列表自动滚动播放

vue3-seamless-scroll组件支持上下左右无缝滚动,单步滚动,并且支持复杂图标的无缝滚动。 核心特性 多方向无缝滚动 支持上下、左右四个方向的自动滚动,通过 direction 参数控制(默认 up),适用于新闻轮播、…...

Scrapyd 详解:分布式爬虫部署与管理利器

Scrapyd 是 Scrapy 官方提供的爬虫部署与管理平台,支持分布式爬虫部署、定时任务调度、远程管理爬虫等功能。本文将深入讲解 Scrapyd 的核心功能、安装配置、爬虫部署流程、API 接口使用,以及如何结合 Scrapy-Redis 实现分布式爬虫管理。通过本文&#x…...

mac环境配置(homebrew版)

文章目录 【环境配置】HomebrewGitJavaMavenMySQLRedisNacosNode.js 【拓展-mac常见问题】mac文件损坏问题mac必装软件(Java开发版)zsh和bash配置文件区别 【参考资料】 查看每个版本可以用命令brew info xxx ps:每一个环境安装完之后都要关掉…...

19、DeepSeek LLM论文笔记

DeepSeek LLM 1. **引言**2、架构3、多步学习率调度器4、缩放定律1.超参数的缩放定律2. 估计最优模型和数据缩放 5、GQA分组查询注意力汇总deepseekDeepSeek LLM 技术文档总结1. **引言**2. **预训练**3. **扩展法则**4. **对齐(Alignment)**5. **评估*…...

基于LLM的6G空天地一体化网络自进化安全框架

摘要 最近出现的6G空天地一体化网络(SAGINs)整合了卫星、空中网络和地面通信,为各种移动应用提供普遍覆盖。然而,SAGINs的高度动态、开放和异构的性质带来了严重的安全问题。构建SAGINs的防御体系面临两个初步挑战:1)…...

【Mac 从 0 到 1 保姆级配置教程 12】- 安装配置万能的编辑器 VSCode 以及常用插件

文章目录 前言安装 VSCode基础配置常用插件1. 通用开发工具2. 编程语言支持3. 数据库工具4. 主题与界面美化5. 效率工具6. Markdown 工具7. 容器开发8. AI 辅助编程9. 团队协作 最后系列教程 Mac 从 0 到 1 保姆级配置教程目录,点击即可跳转对应文章: 【…...

数据库与SQL核心技术解析:从基础到JDBC编程实战

数据库技术作为现代信息系统的核心,贯穿于数据存储、查询优化、事务管理等关键环节。本文将系统讲解数据库基础知识、SQL语言核心操作、索引与事务机制,并结合Java数据库编程(JDBC)实践,助你构建完整的数据库技术体系。…...

JUC并发编程(上)

一、JUC学习准备 核心知识点:进程、线程、并发(共享模型、非共享模型)、并行 预备知识: 基于JDK8,对函数式编程、lambda有一定了解 采用了slf4j打印日志 采用了lombok简化java bean编写 二、进程与线程 进程和线程概念 两者对比…...

postgres--MVCC

PostgreSQL 的 MVCC(Multi-Version Concurrency Control,多版本并发控制) 是其实现高并发和高性能的核心机制,支持多个事务同时读写数据库而无需加锁阻塞。它的核心思想是通过保留数据的多个版本来避免读写冲突,从而提…...

nanodet配置文件分析

以下是针对 NanoDet-Plus-M-1.5x_416 配置文件的逐模块解析,以及调整参数的作用和影响范围: 1. 模型架构(model) Backbone(骨干网络) backbone:name: ShuffleNetV2model_size: 1.5x # 控制网络宽度&…...

【Linux网络】HTTP

应用层协议 HTTP 前置知识 我们上网的所有行为都是在做IO,(我的数据给别人,别人的数据给我)图片。视频,音频,文本等等,都是资源答复前需要先确认我要的资源在哪台服务器上(网络IP&…...

Unity中AssetBundle使用整理(一)

一、AssetBundle 概述 AssetBundle 是 Unity 用于存储和加载游戏资源(如模型、纹理、预制体、音频等)的一种文件格式。它允许开发者将游戏资源打包成独立的文件,在运行时动态加载,从而实现资源的按需加载、更新以及减小初始安装包…...

CMOS内存的地址空间在主内存空间中吗?

CMOS内存(即CMOS RAM)的地址空间不位于主内存地址空间(如0x00000-0xFFFFF)内,而是通过独立的I/O端口地址进行访问,具体如下: ​1. CMOS内存的物理存储与地址机制​ CMOS RAM芯片通常集成在主板…...

大模型应用中常说的Rerank是什么技术?

Rerank技术详解 一、定义与基本原理 Rerank(重排序)是一种在信息检索系统中用于优化搜索结果排序的技术,其核心目标是通过二次评估和排序候选文档,提升结果的相关性和准确性。其运作机制通常分为两阶段: 初步检索:使用传统方法(如BM25关键词匹配或Embedding向量检索)…...

Python-MCPInspector调试

Python-MCPInspector调试 使用FastMCP开发MCPServer,熟悉【McpServer编码过程】【MCPInspector调试方法】-> 可以这样理解:只编写一个McpServer,然后使用MCPInspector作为McpClient进行McpServer的调试 1-核心知识点 1-熟悉【McpServer编…...

C 语言数据结构基石:揭开数组名的面纱与计算数组大小

各类资料学习下载合集 ​​https://pan.quark.cn/s/8c91ccb5a474​​ 在前面的文章中,我们已经学习了 C 语言一维数组的定义和初始化。我们知道数组是用来存储一系列相同类型数据的集合,并通过下标来访问每个元素。但是,除了通过下标访问单个元素,数组名本身在 C 语言中也…...

Java高频面试之并发编程-15

hello啊,各位观众姥爷们!!!本baby今天又来报道了!哈哈哈哈哈嗝🐶 面试官:as-if-serial 是什么?单线程的程序一定是顺序执行的吗? as-if-serial 规则 定义: …...

MySQL数据库迁移SQL语句指南

MySQL数据库迁移SQL语句指南 一、基础迁移方法 1. 使用mysqldump进行全量迁移 -- 导出源数据库(在命令行执行) mysqldump -u [源用户名] -p[源密码] --single-transaction --routines --triggers --events --master-data2 [数据库名] > migration…...

Vue:生命周期钩子

深入理解 Vue 的钩子函数(生命周期函数) Vue 的钩子函数(生命周期函数)是 Vue 实例在不同阶段自动调用的函数。可以在 Vue 实例的创建、更新、销毁等阶段插入自己的逻辑。 钩子函数的作用 想象一下,Vue 实例的生命周…...

深入理解设计模式之原型模式(Prototype Pattern)

一、为什么需要原型模式? 在传统对象创建方式中,我们通过new关键字直接调用构造函数创建实例。但当遇到以下场景时: 对象初始化需要消耗大量资源(如数据库连接)需要创建的对象与现有实例高度相似希望屏蔽对象创建的复…...

K8S cgroups详解

以下是 Kubernetes 中 cgroups(Control Groups) 的详细解析,涵盖其核心原理、在 Kubernetes 中的具体应用及实践操作: 一、cgroups 基础概念 1. 是什么? cgroups 是 Linux 内核提供的 资源隔离与控制机制&#xff0c…...

ARMV8 RK3399 u-boot TPL启动流程分析 --start.S

上电后运行的第一支文件&#xff1a;arch/arm/cpu/armv8/start.S CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK1 #include <asm/arch/boot0.h> 跳转到 arch/arm/include/asm/arch-rockchip/boot0.h CONFIG_SPL_BUILD1 b 1f ROCKCHIP_EARLYRETURN_TO_BROMno TINY_FRAMEWORKno …...

【网络原理】数据链路层

目录 一. 以太网 二. 以太网数据帧 三. MAC地址 四. MTU 五. ARP协议 六. DNS 一. 以太网 以太网是一种基于有线或无线介质的计算机网络技术&#xff0c;定义了物理层和数据链路层的协议&#xff0c;用于在局域网中传输数据帧。 二. 以太网数据帧 1&#xff09;目标地址 …...

保姆级教程|YOLO11改进】【卷积篇】【4】使用RFAConv感受野注意力卷积,重塑空间特征提取,助力高效提点

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系

虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系 code review! 文章目录 虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系1.UE5中常用核心类的继承关系1.1.简化版1.2.plantuml图1.3.plantuml代码1.4.关于大写字母U和A2.1.组件和类的关系&#xff0c;组件也是类吗&…...

力扣2680题解

记录 2025.5.9 题目&#xff1a; 思路&#xff1a; 1.计算初始或值&#xff1a;首先计算数组中所有元素的按位或结果 allOr&#xff0c;这表示在不进行任何左移操作时数组的或值。 2.计算固定或值&#xff1a;在计算 allOr 的同时&#xff0c;计算一个 fixed 值&#xff0c;…...

搭建基于chrony+OpenSSL(NTS协议)多层级可信时间同步服务

1、时间同步服务的层级概念 在绝大多数IT工程师实际工作过程中&#xff0c;针对于局域网的时间同步&#xff0c;遇到最多的场景是根据实际的需求&#xff0c;搭建一个简单的NTP时间同步服务以时间对局域网中的服务器、网络设备、个人电脑等基础设施实现同步授时功能。虽然这样…...

虚拟内存:深入解析与性能优化

文章目录 虚拟内存的概念虚拟内存的实现方式虚拟内存的页面置换算法虚拟内存的性能影响结论 在现代计算机系统中&#xff0c;虚拟内存&#xff08;Virtual Memory&#xff09;是一种至关重要的技术&#xff0c;它极大地提高了系统的多任务处理能力和内存利用率。本文将深入探讨…...

元数据和主数据

元数据和主数据是数据管理中的两个关键概念&#xff0c;其核心区别如下&#xff1a; 1. 定义与本质 元数据&#xff08;Metadata&#xff09; “关于数据的数据”&#xff0c;用于描述数据的属性、结构、来源、用途等上下文信息。 示例&#xff1a;数据库表的字段名称、数据类型…...

JavaScript事件处理全解析:从基础到最佳实践

在现代Web开发中&#xff0c;事件处理是构建交互式应用的核心技术。JavaScript提供了多种事件绑定方式&#xff0c;每种方法都有其适用场景和特点。本文将深入探讨7种主流的事件绑定方法&#xff0c;通过代码示例和原理分析&#xff0c;帮助开发者选择最合适的解决方案。 一、…...

高级数据结构:线段树

线段树概述 线段树是一种处理区间问题的优越算法&#xff0c;也是算法竞赛的常客。 线段树的特点是&#xff0c;类似于一棵二叉树&#xff0c;将一个序列分解成多个区间并储存在二叉树上。 例如&#xff0c;把区间 [ 1 , 10 ] [1,10] [1,10]作为树的根节点&#xff0c;然后把…...

精讲C++四大核心特性:内联函数加速原理、auto智能推导、范围for循环与空指针进阶

前引&#xff1a;在C语言长达三十余年的演进历程中&#xff0c;每一次标准更新都在试图平衡性能与抽象、控制与安全之间的微妙关系。从C11引入的"现代C"范式开始&#xff0c;开发者得以在保留底层控制能力的同时&#xff0c;借助语言特性大幅提升代码的可维护性与安全…...

用ffmpeg压缩视频参数建议

注意:代码中的斜杠\可以删除 一、基础压缩命令&#xff08;画质优先) ffmpeg -i input.mp4 \-c:v libx264 -preset slow -crf 23 \ # H.264编码&#xff0c;平衡速度与质量-c:a aac -b:a 128k \ # 音频压缩-vf "scaleif(gt(a,16/9),1920,-2):if(…...