主从复制模式
在主从复制模式下,Redis 的数据转移和客户端访问的行为如下:
数据转移行为
主节点(Master)会将数据同步到从节点(Slave),这是服务端自动完成的过程;
数据转移通过 Redis 的复制机制实现,主节点将写操作传播到从节点。
客户端访问行为
客户端通常直接连接到主节点进行读写操作;
从节点主要用于读取操作(通过配置
READONLY
模式),客户端可以显式连接到从节点进行读操作;客户端不需要计算访问哪个节点(因为不涉及到分片问题),而是由管理员或外部工具(如代理)决定。
哨兵模式(Redis Sentinel)
数据转移行为
数据转移行为遵循主从复制模式;
Sentinel 自动完成主从切换。
客户端访问行为
客户端通过配置的 Sentinel 地址(而非直接连接主节点)获取当前主节点信息;
故障转移期间客户端与旧主节点的连接会断开,收到
READONLY
错误或超时;客户端需重新向 Sentinel 查询新主节点地址(支持自动处理的客户端库会主动重试);
故障转移期间,客户端写入可能短暂失败(直到新主节点选举完成)。
原生集群模式(Redis Cluster)
数据转移行为
Redis Cluster 使用分片(Sharding)将数据分布到多个节点上。每个节点负责一部分哈希槽(Hash Slot,共 16384 个);
当集群扩容或缩容时,Redis Cluster 会自动重新分配哈希槽,并将数据从旧节点迁移到新节点。这个过程是服务端自主完成的;
数据迁移是通过 Redis 的
MIGRATE
命令实现的,源节点将数据发送到目标节点;迁移过程中,客户端仍然可以正常访问数据,Redis Cluster 会确保数据的一致性。
客户端访问行为
客户端需要计算访问哪个节点;
如果客户端尝试访问错误的节点,Redis Cluster 会返回
MOVED
或ASK
重定向错误,告诉客户端正确的节点;客户端需要处理这些重定向错误,并重新发送请求到正确的节点。