news 2026/10/2 8:59:35

Redis主从复制深度拆解:全量同步、部分同步与一致性权衡

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis主从复制深度拆解:全量同步、部分同步与一致性权衡

如果让我给Redis面试题的热度排个名,Redis同步机制里的主从复制绝对稳居前三。关键是这个问题深不见底——青铜层问全量和部分的区别,王者层问复制积压缓冲区满了会怎样,再往下还能挖到主从切换后的复制风暴、分布式锁为什么会失效。同一个问题,水平差一点的人三句话就说完,真正吃透的人能聊半小时。

我一直觉得,同步机制是Redis知识体系里性价比最高的一个考点,因为它串起了持久化、网络协议、高可用、性能与一致性权衡一整条链路。这篇文章就从底层模型到面试话术,把Redis同步机制彻底拆开讲透。如果你在准备面试,或者正在排查线上主从同步延迟的问题,这篇应该都能帮上忙。

1. 为什么Redis同步机制能成为面试“钉子户”

1.1 一个老问题能考察出三个层级的候选人

打开任意一份Redis面试题,主从复制几乎是必现题。我觉得这不是面试官偷懒,而是这个问题天然具备“由浅入深”的区分度,几乎可以顺着一个人回答的深度,直接判断出他的技术档位。

青铜级别的回答是这样的:主节点生成RDB快照发给从节点,从节点加载,之后主节点把写命令同步过去。听起来没错,但经不起任何追问——那断线重连呢?重连后是全量还是增量?判断标准是什么?

黄金级别的回答会提到PSYNC:全量同步用RDB做基线,断线重传靠PSYNC的部分同步,核心是复制ID和复制偏移量的协商。

钻石级别的回答则会主动带出更深的东西:复制积压缓冲区的大小权衡、主从切换后psync2如何避免全量复制风暴、异步复制在分布式锁场景下可能带来的锁丢失问题。到这一层,面试官基本已经不怎么问了,因为候选人的知识深度已经证明得很充分了。

面试官问同步机制,真正要考察的其实不是“你知不知道复制”,而是你对分布式系统里“数据如何在多副本间保持一致”这个底层命题的理解。这个话题可以从一个RDB快照一直聊到脑裂、丢数据、锁丢失,几乎覆盖了Redis所有和“数据安全”相关的知识点。

1.2 一个考点牵出整张Redis知识网

同步机制在Redis里的位置非常特殊,它几乎是所有高可用方案的地基。Redis Cluster每个分片内部依然是主从复制;哨兵做故障转移时,依赖已经同步好的从节点快速晋升;持久化方式和复制强相关,因为全量同步的基线就是RDB快照;高一致性场景下的分布式锁、读写分离,全部受制于“复制是异步的”这件事。

所以你会发现一个有意思的现象:如果一个人能把同步机制讲透,那他对持久化、集群、分布式锁这些话题通常也不会差。反过来,如果一个人只会背“RDB全量加增量命令传播”这一句话,那其他相关话题大概率也是薄弱的。

这也是为什么面试官那么爱从这个点往下钻。它就像一个知识枢纽,往左可以问持久化配置,往右可以问主从切换,往上可以问集群选举,往下可以问一致性协议。你在一个问题上能答出多少层,基本就暴露了你的Redis知识体系是成片的还是散点的。

1.3 这篇文章的拆解路线

后面我会按照这样的顺序展开:先讲复制模型里的核心概念——复制ID、偏移量、PSYNC协议;再分别拆解全量同步和部分同步的完整链路;接着聊同步和持久化、数据一致性、分布式锁的三角关系;最后给一份面试高频追问的参考话术和一套可以直接上手的工程配置。

读的时候我建议你打开一个Redis实例跟着操作,光看不敲不如动手来得直观,尤其是第5章的Docker Compose实验环境,值得亲手跑一遍。

2. 先啃最硬的骨头:复制ID、偏移量与PSYNC协议

2.1 同步的本质:在“哪条复制流、哪个位置”上达成共识

我习惯把Redis的同步机制理解成一句话:主从双方先在“哪条复制流”和“哪个位置”上达成共识,然后缺失的部分补上。这句话里的“哪条复制流”就是replid,“哪个位置”就是offset。

replid是主节点启动时生成的一个40位十六进制字符串,可以理解为主节点实例的“身份指纹”。主节点每次以主节点身份启动,都会生成一个新的replid,代表一条全新的复制流历史。offset则是一个持续累加的字节计数:主节点每向从节点发送一个字节的复制流,自己的offset就前进;从节点每接收并应用一个字节,自己的offset也前进。理想情况下,主从offset相等,数据就完全一致。

用仓库类比可能更好懂:replid是仓库编号,offset是货运单号。从节点断线回来,相当于一个司机带着“仓库编号+货运单号”回到仓库问:从XX单号开始,后面丢的货能不能补发?仓库管理员一查,如果这批货还在,就续发;如果仓库都换过了,或者丢的货太早已经超出仓库保存范围,就只能重新把整个仓库搬一遍。全量同步和部分同步的区别,本质上就藏在这个“能不能补发”的判断里。

2.2 PSYNC:主从之间的一句“暗号”

从节点在建立或恢复复制关系时,会给主节点发一条命令:PSYNC <replid> <offset>。

  • 首次连接:从节点不知道任何复制历史,发的是 PSYNC ? -1;
  • 断线重连:从节点带上之前记住的replid和offset,发 PSYNC <replid> <offset>。

主节点收到后,根据情况返回三种结果:

返回含义后续动作
+FULLRESYNC <replid> <offset>无法部分同步,触发全量同步主节点生成并发送RDB,随后补增量
+CONTINUE可以做部分同步主节点直接从复制积压缓冲区补发缺失数据
错误或未知状态协议不匹配等按异常处理或降级

这个协商过程发生在连接建立初期,速度很快。很多线上同步延迟问题的排查,第一步就是看日志里这个协商结果是FULLRESYNC还是CONTINUE——如果频繁出现FULLRESYNC,说明部分同步一直没能成功,这时候要顺着repl_backlog和网络抖动往下查。

2.3 replid2:主从切换后怎么认出“老熟人”

有一个细节很多人第一次接触时会被绕晕:replid2到底是干嘛的。

场景是这样:A是主节点,B、C是从节点。A宕机,B晋升为新主节点。此时C还是旧的复制ID,它带着replid_A来连接新主B。如果B完全不认识replid_A,那C只能全量同步,代价非常大。

所以Redis 4.0引入psync2时设计了一个机制:B在作为从节点期间,会保存旧主A的replid;晋升为主后,B自己的新replid就是replid_B,同时把replid_A保存在replid2里。这样C带着replid_A回来时,B通过replid2就能认出“这是老熟人,数据历史有交集”,只要C的offset还在自己的复制积压范围内,就可以做部分同步。

psync2这个机制,是主从切换后避免“全量复制风暴”的关键,我放第4章专门展开。

2.4 先用一条命令看看现状

理解概念最好的方式,是开两个Redis实例,把一个配成主从关系,然后执行:

redis-cli -p 6379 info replication

会看到类似下面的输出:

# Replication role:master connected_slaves:1 slave0:ip=127.0.0.1,port=6380,state=online,offset=14875,lag=0 master_replid:6f8f2b4a7c3d... master_replid2:0000000000000000000000000000000000000000 master_repl_offset:14875

这里每一行都对应刚讲过的概念:master_replid是当前主节点的复制ID,master_replid2是冗余保存的旧复制ID,master_repl_offset是主节点当前的偏移量,slave0里的offset是那个从节点报告过来的位置,lag是主节点最后一次收到从节点心跳到现在的时间差(秒)。日常排查同步延迟,我第一件事就是跑这条命令看offset差。

3. 全量同步链路拆解:快照只是第一步

3.1 一次全量同步的完整流程

很多人对全量同步的理解停留在“生成RDB、传输、加载”,但实际链路比这长得多。我按顺序拆一下:

  1. 从节点发起 PSYNC ? -1,主节点返回 +FULLRESYNC <replid> <offset>。
  2. 主节点检查是否有可复用的RDB生成任务,没有则fork子进程执行BGSAVE。
  3. BGSAVE期间主节点继续处理写命令。从fork那一刻起,新产生的写命令会同时进入两个地方:replication buffer(该从节点的独立输出缓冲)和repl_backlog(全局复制积压缓冲区)。
  4. RDB生成完成后,主节点把RDB数据发给从节点。
  5. 从节点收到RDB后,清空自己的旧数据,然后载入RDB。载入期间从节点对外表现为LOADING状态,不提供正常数据服务。
  6. RDB传输完成后,同步期间积累在replication buffer里的增量写命令,再按顺序补发给从节点。
  7. 从节点应用完缓冲区里所有命令后,主从offset对齐,进入稳态的增量复制。
  8. 之后主节点每次执行写命令,都会实时通过复制连接传播给从节点。

很多教程没讲透的一点是:RDB的“基线时刻”不是BGSAVE开始的那一刻,而是fork子进程的瞬间。fork之后新产生的写命令,全部靠缓冲区补发。这也是为什么大实例做全量同步时,如果写流量很猛,复制的缓冲压力会非常大,甚至可能直接把同步链路压垮。

3.2 那个容易被忽略的“死亡缓冲区”:replication buffer

我经常在面试里问一个问题:全量同步期间,主节点的写流量特别大,会发生什么?很多人答不上来。

答案藏在配置里:

client-output-buffer-limit replica 256mb 64mb 60

这是Redis默认给从节点连接设置的输出缓冲区上限:硬限制256MB,软限制64MB且持续超过60秒。意思是,全量同步期间主节点在给这个从节点发送RDB的同时,还要把新写入的命令缓存到复制连接对应的缓冲区里。如果写流量大到缓冲区超过256MB,或者64MB以上持续60秒,主节点会直接断开与这个从节点的连接——然后全量同步从头再来。

这个坑非常经典:业务高峰期给一个大Redis实例加从节点,主节点一边传几个GB的RDB,一边扛着每秒几万次写入,replication buffer被撑爆,从节点反复全量同步,主节点网络和磁盘被反复打满。我在实际运维中遇到过一次类似的线上事故,最后总结出的经验是:加从节点这种操作,尽量放到业务低峰期;评估buffer余量;必要时临时调大client-output-buffer-limit,等同步完成后再改回来。

另外要注意,replication buffer是按从节点独立分配的,从节点越多,总缓冲内存越大。很多人把这口锅全扣在repl_backlog头上——两者名字像,职责完全不同,这是面试里特别容易混淆的高频雷区,我在第6章会专门区分。

3.3 无盘复制:磁盘不够快时的兜底方案

默认情况下,主节点把RDB写到磁盘,再从磁盘读出来发给从节点。如果磁盘低速,这条链路会非常慢。Redis因此提供了无盘复制:

repl-diskless-sync yes

开启后,主节点fork子进程直接在内存中生成RDB数据流,通过socket发送给从节点,完全不落盘。它解决的是磁盘IO瓶颈,代价是内存占用增加(RDB数据要和正常数据同时存在内存里),同时主节点的网络压力会更大。适合磁盘慢、网络带宽充裕、从节点数量较多的场景;如果RDB数据量非常大而内存又紧张,无盘复制反而会引发内存不足的风险。

还有一个配套参数是repl-diskless-sync-delay,默认5秒。主节点等待5秒,是为了让多个从节点同时接入后共享同一次RDB生成,避免重复fork的开销。如果你希望新从节点尽快开始同步,可以把delay调小甚至设为0。

3.4 全量同步期间主从分别承受什么压力

主节点的压力主要在三个地方:fork瞬间由于写时复制导致的短暂阻塞(内存越大越明显)、BGSAVE时的磁盘IO、发送RDB和缓冲区增量时的网络带宽。从节点的压力则主要在清空旧数据和载入RDB时的CPU与内存抖动。

所以大实例做全量同步,本质上是对主节点的一次“小考”。我在给团队做方案评审时经常强调:全量同步前先看主节点负载、磁盘IO和带宽余量,别在高峰期硬上。实践中见过为了减少全量同步对主节点影响,给从节点加带宽限速的,也有通过树状级联(从节点再挂从节点)分摊压力的——这些都属于复制架构设计的进阶话题了。

4. 部分同步:断线续传的工程智慧

4.1 没出现PSYNC之前,断线重连成本有多高

Redis 2.8之前的复制只有SYNC命令,每次从节点掉线重连,都要主节点重新BGSAVE、重新传全量RDB。网络稍有抖动,从节点就反复断线重连,主节点被迫反复生成全量快照,整条复制链路被拖垮。2.8引入PSYNC,核心目标就是让断线重连变成“缺多少补多少”。

理解这个背景很重要。部分同步不是为了炫技,是为了解决全量同步成本太高这个真问题。也是从这里开始,repl_backlog(复制积压缓冲区)登上了舞台。

4.2 repl_backlog:积压区的容量是一道算术题

repl_backlog是主节点维护的一块环形缓冲区,默认配置只有1MB:

repl-backlog-size 1mb

主节点的写命令在传播给从节点的同时,也会写进这块环形缓冲区。从节点断线后,它缺失的数据如果都还在缓冲区里,主节点就能直接补发;如果断线太久、offset已经滑出了缓冲区范围,就不得不全量同步。

这个1MB对高写入的场景来说,小得可怜。假设主节点每秒写入200KB,缓冲区只能覆盖5秒;断线超过5秒,回来就是一次全量同步。线上建议按下面的公式估算:

推荐repl-backlog-size = 峰值每秒写入字节数 × 期望容忍的最大断线秒数

比如峰值每秒写入2MB,希望容忍从节点断线5分钟,那至少需要 2MB × 300 = 600MB。实际中我一般在这个数上再留1.5倍余量。注意这是内存开销,600MB对很多大实例可以接受,但如果主节点本身内存紧张,就要做取舍了。

还需要注意repl_backlog不是永久存在的。主节点在最后一个从节点断开之后,默认再过3600秒(repl-backlog-ttl)就会释放这块缓冲区。如果经常有从节点来来去去,积压区反复创建和释放,也可能带来意外的内存波动。

4.3 部分同步的判定:一次快速检查

从节点断线重连后,主节点的判定逻辑其实很简单:

  1. 从节点发来 PSYNC <replid> <offset>。
  2. 主节点检查replid:必须等于自己的replid,或者等于自己的replid2(psync2场景)。
  3. 主节点检查offset:必须落在repl_backlog的有效范围内。
  4. 都满足:返回+CONTINUE,随后直接把缺失的复制流补发过去;任一不满足:返回+FULLRESYNC,退化为全量同步。

从这个简洁的判定就能看出,repl_backlog不仅决定了“断线多久能续传”,还直接影响全量同步发生的频率。如果你的Redis日志里频繁出现全量同步,第一件事不是怀疑网络,而是看repl-backlog-size是不是设小了。

4.4 psync2:主从切换后为什么不再复制风暴

4.0之前的Redis有一个著名的痛点:主从切换后,所有从节点都要对新主节点做一次全量同步。原因很简单——新主的replid变了,老从节点带着旧replid来对不上号。一个分片下有5个从节点,切换瞬间就产生5次全量RDB传输,带宽瞬间打满,这就是所谓的“全量复制风暴”。

psync2的解法很巧妙:让每个从节点也维护一个复制积压缓冲区,同时用replid2记住旧主的复制ID。旧从节点B晋升为新主,它的replid2还保留着旧主A的replid,它的repl_backlog里也已经积压了晋升前复制到的数据。其他老从节点C带着replid_A回来,B通过replid2认出它,再检查C的offset是否落在自己的积压区里。

只要满足条件,老从节点们就能通过部分同步快速追上,而不是全部重新全量复制。这也是为什么生产环境在设置repl-backlog-size时,要把主从切换需要覆盖的窗口算进去——切换本身需要时间,积压区越大,切换后的复制压力越小。

5. 同步、持久化与数据一致性:面试最爱深挖的三角关系

5.1 一个让我印象深刻的线上事故:主节点不持久化

有一次帮朋友排查故障,Redis主节点关闭了快照,也关了AOF,从节点倒是开了AOF。结果服务器重启,主节点加载完发现自己啥都没有,变成空库,然后向从节点同步空数据,从节点们跟着被清成空库——整个集群的数据一夜之间归零。

很多人以为Redis有主从复制就高枕无忧,这是最大的误解。复制的基线是全量同步时的RDB快照。如果主节点本身没有任何持久化,重启后就是空库,而空库会通过复制把空数据同步给所有从节点。所以复制不是持久化的替代品,两者是配合关系。

生产环境我推荐的主从持久化组合:

角色推荐配置说明
主节点appendonly yes,appendfsync everysec最多丢1秒数据,性能影响可控
从节点appendonly yes副本具备独立恢复能力
纯缓存场景save "" 但必须接受重启丢数据明确该场景可容忍丢失,才敢关持久化

如果对数据丢失零容忍,还应该配合哨兵做自动故障转移:主节点挂了尽快切换,缩短服务不可用窗口。

5.2 复制延迟、读写分离和那个“INCR不准”的问题

Redis复制是异步的:主节点执行完写命令就返回客户端,不会等从节点确认。这意味着从节点永远存在一个理论上不为零的滞后。滞后来源主要有几类:主节点写QPS过高导致复制流排队;网络带宽打满,尤其有大key写入或全量同步进行中;从节点自身阻塞,比如在执行慢命令、fork、大key删除;系统资源争抢导致的CPU、磁盘IO异常。

监控手段很直接:对比info replication里master_repl_offset和slave0的offset,差值就是字节级别的滞后量;lag字段是秒级别的最后心跳时间差。我习惯在监控系统里对“主从offset差值”和“lag大于5秒”分别告警。

这里顺带说一个很多人踩过的坑:热点计数场景,比如商品浏览数、库存扣减,如果把INCR、DECR这类操作打到从节点上,结果往往不准——原因就是复制延迟,从节点上的计数器可能还是几秒前的值。很多Spring Boot项目做读写分离时把查询打到从节点,在主从切换或复制延迟期间会看到RedisCommandTimeoutException,排查到最后根因往往就是复制链路不稳定。计数类操作必须走主节点,从节点只适合承载那些对一点点滞后不敏感的读流量。

5.3 分布式锁为什么会因同步机制失效

Redis做分布式锁很流行:SET key value NX EX 10。但这个锁在极端情况下会失效,根因就在同步延迟。场景如下:

  1. 客户端A在主节点上拿到锁;
  2. 主节点还没来得及把这条写命令复制到从节点,就宕机了;
  3. 哨兵把从节点晋升为新主,此时新主上根本没有那把锁;
  4. 客户端B来拿锁,在新主节点上SET成功,锁被“双开”。

A和B同时认为拿到了锁,互斥就失效了。这个问题的经典解法是Redlock——向多个独立Redis节点申请锁,超过半数成功才算拿到,降低单点失效的概率。但Redlock本身也有争议,工程上很多团队接受“单主节点+快速切换会丢锁”的极小概率风险,换取自动化和简单性,只要业务能容忍偶尔的重入冲突。

如果要在架构层面缓解,Redis本身提供了一个数据安全阀:

min-replicas-to-write 1 min-replicas-max-lag 10

含义是:只有至少1个从节点的延迟不超过10秒时,主节点才接受写命令。配置了它,在复制断开、从节点全部掉线或滞后严重时,主节点会拒绝写入,从一个角度压缩了锁丢失的窗口。注意这是降低概率,不是根治,极端情况下仍可能丢锁。如果配置生效后从节点没就绪,主节点的写命令会直接报“Not enough good replicas to write”,这也是一个很常见的初学困惑点。

5.4 一套可以直接抄的配置和实验环境

把这些配置汇总成一份可以直接用的模板(新版Redis用replicaof,旧版本是slaveof):

# 主节点 redis.conf appendonly yes appendfsync everysec repl-backlog-size 256mb repl-backlog-ttl 3600 # repl-diskless-sync yes # 按需开启无盘复制 # min-replicas-to-write 1 # 按需开启数据安全阀 # min-replicas-max-lag 10 # 从节点 redis.conf replicaof master-ip 6379 masterauth master-password replica-read-only yes appendonly yes

想快速在本地搭一套主从环境,用Docker Compose最省事。下面是一个可以直接跑的示例:

services: redis-master: image: redis:7.0 command: > redis-server --requirepass master123 --appendonly yes --repl-backlog-size 256mb ports: - "6379:6379" volumes: - master-data:/data redis-slave: image: redis:7.0 command: > redis-server --replicaof redis-master 6379 --masterauth master123 --appendonly yes depends_on: - redis-master ports: - "6380:6379" volumes: - slave-data:/data volumes: master-data: slave-data:

启动后执行:

docker compose up -d sleep 5 redis-cli -p 6380 info replication

看到role:slave且master_link_status:up,主从就通了。如果没起来,docker compose logs redis-slave看一眼报错,多半是密码或者地址配置问题。之后再往6379写数据,到6380上查,能直观感受到复制同步的过程;还可以手动停掉6380等一会儿再重启,日志里会显示这次重连走的是CONTINUE还是FULLRESYNC——自己亲手复现一遍,比背十遍概念都管用。

6. 高频追问实录与答题话术

6.1 面试官的追问链路到底有多长

我把这些年遇到过的、关于Redis复制的追问串成一条链,你可以自测一下每个层面能不能答上来:

  1. 主从复制的整体原理是什么?
  2. 全量同步和部分同步有什么区别?
  3. 第一次连接时从节点发什么命令?
  4. PSYNC的replid和offset各是什么?
  5. 复制积压缓冲区太小会发生什么?
  6. 部分同步要满足哪些条件?
  7. 主从切换后为什么可能全量复制风暴?psync2怎么解决?
  8. 主节点没有开持久化,重启后会发生什么?
  9. 复制是同步还是异步?WAIT能保证强一致吗?
  10. 分布式锁为什么可能因主从切换失效?

能流畅答到第7层,基本就超过大多数候选人了;能答到第10层,这个考点可以直接变成你的加分项。

6.2 五组高频问答的参考话术

问:全量同步和部分同步的区别?

参考回答:全量同步是主节点生成RDB快照发给从节点,从节点清空数据后加载,再把同步期间累积的写命令补上,代价高;部分同步是断线重连后,主节点利用repl_backlog把从节点缺失的那段复制流直接补发,代价低。触发部分同步有两个条件:从节点带来的replid要匹配(当前主节点或replid2),offset要落在积压缓冲区有效范围内。否则就退化成全量同步。

问:repl_backlog太小会有什么后果?

参考回答:从节点断线时间稍长,offset滑出积压区,重连时只能全量同步。高写入场景下,1MB的默认值可能只够覆盖几秒钟。频繁全量同步会拖垮主节点的磁盘、网络和内存。解决办法是估算峰值写入速率乘容忍断线时长,把repl-backlog-size调到合理值,同时监控主从offset差值。

问:主从切换后为什么可能全量复制风暴?psync2解决了什么?

参考回答:4.0之前,新晋升的主节点replid变了,老从节点带着旧replid来对不上,只能全量同步。多个从节点同时全量就会打满带宽。psync2让从节点晋升时把旧主replid保存在replid2里,并且从节点自己也维护复制积压缓冲区,老从节点回来时能通过replid2被识别,只要offset在积压区,就直接部分同步,避免全量风暴。

问:主节点不开持久化有什么风险?

参考回答:复制的基线是RDB快照。如果主节点没开持久化,重启后是空库,空库会通过复制把从节点全部同步成空库,整个集群数据归零。所以复制救不了“主节点无持久化”的局。正常至少要主节点开AOF或RDB,再配合哨兵做自动故障转移。

问:WAIT命令能保证强一致吗?

参考回答:不能。WAIT能阻塞当前客户端,等待N个从节点确认之前的写命令,但它不保证在极端故障下主从完全一致,也无法防止主节点在WAIT返回后、在复制完成前宕机。它能把“写后读不一致”的窗口压缩得很小,但本质上Redis复制还是最终一致性的。

6.3 最容易说错的几个概念雷区

整理几个我面试别人时经常发现的高频错误:

  • replication buffer和repl_backlog不分。前者是主节点为每个从节点独立分配的client output buffer,主要在全量同步期间缓存增量;后者是全局共享的环形缓冲区,用于部分同步。名字像,职责完全不同,混着说很容易露馅。
  • 部分同步的缓存不在从节点。从节点断线期间自己不做任何本地缓存,真正兜底的是主节点的repl_backlog。有人以为从节点会自己“攒着”,方向完全反了。
  • PSYNC的offset不是“从节点自己写了多少”,而是从节点已经接收并应用到的复制流位置。
  • 从节点并不会主动删过期键。过期键的删除由主节点执行并广播DEL命令,从节点只在被查询到逻辑过期的键时返回不存在。
  • 从节点晋升为主节点后replid会变,这是机制的一部分,也正是psync2存在的意义。

6.4 怎样把这个问题讲出深度

最后给一个临场表达技巧:面试时把答案主线放在“性能与数据一致性的权衡”上。全量同步重但简单可靠;部分同步轻但有积压区大小限制;异步复制快但带来了延迟和锁丢失问题;psync2、WAIT、min-replicas配置,都是在不同层面缓解一致性问题。

一旦用这条主线串起来,面试官往哪个方向追问,你都能把技术点挂回主线上。这比零散地背一堆名词要稳得多。遇到对某个版本细节确实记不清的地方,也完全可以坦诚说“这个细节我现在记得不精确,但我可以讲一下设计思路”——面试官更看重的是你能否用已知的知识推导出未知的结论,而不是背得出所有字母。

说实话,这几年我面试过不少人,Redis复制这块能让我眼前一亮的,几乎都做对了一件事:把机制当成权衡而非八股去理解。背下PSYNC的返回码并不难,难的是明白它为什么存在,以及它解决不了什么。我自己也踩过不少坑,最深的体会就是那句话——同步机制不是孤立的知识,它是Redis所有高可用设计的地基。你把这根主线理通了,再去答持久化、集群、分布式锁的题,会发现它们突然都串起来了。如果后面想继续深挖,可以从“WAIT的局限”和“Redlock之争”往下看,这两个话题够你琢磨好一阵子。祝面试顺利。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 8:59:18

云边端协同算力体系:从分布式推理到确定性调度

1. 这不是“云边端”口号&#xff0c;而是一场算力分配方式的底层重构最近和几个做工业视觉检测的老朋友吃饭&#xff0c;聊到他们新上线的产线质检系统——原来部署在机房里的GPU服务器&#xff0c;现在被拆成了三块&#xff1a;模型训练扔进公有云集群&#xff0c;中间层推理…

作者头像 李华
网站建设 2026/10/2 8:59:10

MySQL安装到增删改查全教程:环境配置、Workbench操作与SQL实践

简介&#xff1a;面向MySQL零基础学员的安装与使用教程&#xff0c;覆盖数据库环境搭建与基础操作的全流程&#xff0c;特别适合初次接触关系型数据库、需要完成课程实验或本地开发环境部署的读者。教程从官网下载官方安装向导讲起&#xff0c;针对安装过程中的密码设置、组件下…

作者头像 李华
网站建设 2026/10/2 8:58:58

Spring Boot+Vue在线问卷调查系统:表结构、接口与联调实战

简介&#xff1a;基于SpringBoot与Vue的在线问卷调查系统&#xff0c;是一套面向计算机专业毕设学生及Java学习者的完整项目方案&#xff0c;可作为课程设计、期末大作业或毕业设计直接使用。系统围绕问卷全生命周期设计&#xff0c;涵盖用户登录认证、问卷创建与编辑、题目配置…

作者头像 李华
网站建设 2026/10/2 8:58:42

Excel考核表自动化:模板+公式+宏一键生成月度报表

你是不是也这样&#xff1a;每个月月底&#xff0c;领导一句“把考核表发我”&#xff0c;你就得从人员名单、上个月的绩效数据、指标权重、评分、排名一路弄到汇总&#xff0c;少说也得折腾大半天。往上一翻&#xff0c;上个月的表格还躺在“桌面-最终版-真的最终版”这样的文…

作者头像 李华
网站建设 2026/10/2 8:57:35

脑电ERD/ERS全解析:从同步化机制到运动想象脑机接口应用

在脑电&#xff08;EEG&#xff09;分析这个圈子里&#xff0c;事件相关同步化&#xff08;ERS&#xff09;和事件相关去同步化&#xff08;ERD&#xff09;&#xff0c;听起来像是教科书里才有的概念&#xff0c;但它几乎每天都会出现在运动想象脑机接口、认知负荷评估、甚至是…

作者头像 李华
网站建设 2026/10/2 8:57:14

O(logn)的本质是问题空间收缩,不是速度标签

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华