Redis 集群模式大揭秘,大厂后端开发必备技能!
mhr18 2025-07-24 19:55 16 浏览 0 评论
在互联网大厂的后端开发领域,Redis 作为一款高性能的内存数据库,被广泛应用于缓存、消息队列、分布式锁等场景。而随着业务规模的不断扩大,数据量和并发量的剧增,单机 Redis 逐渐难以满足需求,Redis 集群模式应运而生。今天,就为各位互联网大厂的后端开发人员详细汇总一下 Redis 的几种集群模式。
主从复制模式
主从复制模式是 Redis 最基础的集群方案。在这个模式里,Redis 实例分为主节点(Master)和从节点(Slave)。主节点负责处理所有写请求,执行写操作后,会将数据变更同步给从节点。从节点主要处理读请求,并且从主节点复制数据,默认情况下从节点是只读的,不能直接接收写操作。
从架构上看,它呈现星型结构,主节点位于中心,从节点围绕主节点分布。数据流向单一,只能从主节点流向从节点,各从节点之间没有直接的数据交换。一个主节点可以对应多个从节点,形成一对多的关系,但一个从节点只能对应一个主节点。
主从复制的实现机制包含全量复制和增量复制。当从节点首次连接主节点时,会触发全量复制,主节点生成一个 RDB 文件发送给从节点,从节点接收后加载到内存中。后续运行过程中,主节点将新的写命令发送给从节点,通过增量复制保持数据同步。Redis 采用异步复制机制,主节点不会等待从节点确认,直接返回客户端操作结果,这虽然提高了性能,但也带来了数据不一致的风险。
主从复制模式的优点不少。配置简单,在从节点执行SLAVEOF命令或在配置文件中设置相应参数即可实现,易于部署和维护。通过读写分离,能显著提高系统读取性能,适合读多写少的应用场景。同时,它还提供了数据备份功能,增强了数据安全性,从节点也可按需扩展,提升整体读取能力,并且资源消耗相对较低。
然而,它的缺点也不容忽视。不具备高可用性,当主节点发生故障时,需要手动将从节点提升为主节点,无法自动进行故障转移。由于只有一个主节点,写操作存在瓶颈,无法自动故障恢复,增加了运维成本,扩展能力有限,无法突破单机内存限制,且主从节点间可能存在数据同步延迟,导致数据不一致。
这种模式主要适用于数据备份和读多写少的场景。典型部署方案是一主二从,在小型应用中较为常见。
哨兵模式
哨兵模式是在主从复制模式基础上的高可用升级版,引入了自动故障检测和转移机制。其核心是 Sentinel 系统,这是一组特殊的 Redis 实例,专门监控主从节点运行状态,在主节点故障时自动完成故障转移。
从架构上看,哨兵模式包含主从节点集群和哨兵集群两个层面。主从节点集群由一个主节点和多个从节点组成,哨兵集群由多个哨兵节点组成独立监控系统。形成双层结构,哨兵节点互相连接成网状结构,同时每个哨兵与每个 Redis 节点都建立连接。客户端通过哨兵获取当前主节点信息,实现透明访问。
哨兵模式的工作机制包括监控、故障判定和自动故障转移三个环节。故障判定分主观下线和客观下线,主观下线是单个哨兵认为节点不可用,客观下线则需要多数哨兵(通常是 N/2 + 1)共同认定节点不可用。当主节点被判定为客观下线后,哨兵集群基于 Raft 算法选出领头哨兵负责故障转移,领头哨兵根据优先级、复制偏移量等条件从从节点中选出新主节点,并通知其他从节点复制新主节点,将旧主节点降级为从节点。
哨兵模式实现了高可用性,支持自动故障转移,无需人工干预即可恢复服务。多个哨兵互相监控,避免了监控系统本身的单点故障,并且保留了主从复制读写分离的优势,增加了高可用保障。
不过,它的配置相对复杂,需要额外的哨兵节点,增加了系统复杂度。写操作仍然存在瓶颈,只有一个主节点处理写请求,且无法解决数据分片问题,不支持水平扩展,受限于单机内存容量。
典型部署方案是一主二从三哨兵,适用于中型应用。
Cluster 模式
Cluster 模式是 Redis 3.0 版本后推出的分布式解决方案,通过数据分片和多主节点设计,解决了高可用问题,突破了单机内存和写入性能限制。
从架构上看,Cluster 模式由多个主节点组成,每个主节点负责整个数据集的一部分,每个主节点可配置多个从节点。所有节点互相连接,形成完整网状结构,采用去中心化设计,无中心协调节点。节点间通过集群总线(cluster bus)通信,交换集群状态信息。
Cluster 模式的核心机制是数据分片。它引入哈希槽(hash slot)概念,共有 16384 个哈希槽,数据根据键的 CRC16 校验值对 16384 取模,决定放置在哪个哈希槽,进而确定存储在哪个主节点上。这种设计实现了数据的均匀分布和水平扩展。
在高可用方面,Cluster 模式为每个主节点配置从节点,当主节点故障时,从节点自动升级为主节点。故障检测和转移机制与哨兵模式类似,但由集群中的节点共同完成,无需额外哨兵系统。节点间通过定期发送 Ping 消息检测对方状态,当半数以上节点认为某主节点下线时,从其从节点中选举新主节点接管槽位。
Cluster 模式的优势明显,多主节点设计大大提高了写入并发能力,解决了写入瓶颈问题,具有线性扩展能力,可通过动态添加节点提升系统容量和性能,去中心化架构避免了中心节点瓶颈,提高了系统整体稳定性。
但它也有一些不足,客户端兼容性要求高,需要支持集群协议,一些老版本客户端可能无法直接使用。对事务支持有限,只支持单 key 操作或同一槽位的多 key 操作,且资源消耗较大,需要更多服务器资源。
Cluster 模式适用于大规模数据存储和高并发读写的场景。典型部署方案是三主三从。
总结
综上所述,Redis 的主从复制模式、哨兵模式和 Cluster 模式各有优劣,在互联网大厂后端开发中,各位开发人员需要根据业务场景、数据量、并发量等因素综合考虑,选择最适合的 Redis 集群模式,以提升系统性能和稳定性。你在实际项目中使用过哪种 Redis 集群模式呢?遇到过哪些问题,又是如何解决的?欢迎在评论区分享你的经验。
相关推荐
- Java面试题及答案总结(2025版)
-
大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Redis、Linux、SpringBoot、Spring、MySQ...
- Java面试题及答案最全总结(2025春招版)
-
大家好,我是Java面试分享最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Spring...
- Java面试题及答案最全总结(2025版持续更新)
-
大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...
- 蚂蚁金服面试题(附答案)建议收藏:经典面试题解析
-
前言最近编程讨论群有位小伙伴去蚂蚁金服面试了,以下是面试的真题,跟大家一起来讨论怎么回答。点击上方“捡田螺的小男孩”,选择“设为星标”,干货不断满满1.用到分布式事务嘛?为什么用这种方案,有其他方案...
- 测试工程师面试必问的十道题目!全答上来的直接免试
-
最近参加运维工程师岗位的面试,笔者把自己遇到的和网友分享的一些常见的面试问答收集整理出来了,希望能对自己和对正在准备面试的同学提供一些参考。一、Mongodb熟悉吗,一般部署几台?部署过,没有深入研究...
- 10次面试9次被刷?吃透这500道大厂Java高频面试题后,怒斩offer
-
很多Java工程师的技术不错,但是一面试就头疼,10次面试9次都是被刷,过的那次还是去了家不知名的小公司。问题就在于:面试有技巧,而你不会把自己的能力表达给面试官。应届生:你该如何准备简历,面试项目和...
- java高频面试题整理
-
【高频常见问题】1、事务的特性原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。一致性或可串性:事务的执行使得数据库从一种正确状态转换成另一种正确状态隔离性:在事务正确提交之前,不允许把该...
- 2025 年最全 Java 面试题,京东后端面试面经合集,答案整理
-
最近京东搞了个TGT计划,针对顶尖青年技术天才,直接宣布不设薪资上限。TGT计划面向范围包括2023年10月1日到2026年9月30日毕业的海内外本硕博毕业生。时间范围还...
- idGenerator测评
-
工作中遇到需要生成随机数的需求,看了一个个人开发的基于雪花算法的工具,今天进行了一下测评(测试)。idGenerator项目地址见:https://github.com/yitter/IdGenera...
- 2024年开发者必备:MacBook Pro M1 Max深度体验与高效工作流
-
工作机器我使用的是一台16英寸的MacBookProM1Max。这台电脑的表现堪称惊人!它是我用过的最好的MacBook,短期内我不打算更换它。性能依然出色,即使在执行任务时也几乎听不到风扇的...
- StackOverflow 2022 年度调查报告
-
一个月前,StackOverflow开启了2022年度开发者调查,历时一个半月,在6月22日,StackOverflow正式发布了2022年度开发者调查报告。本次报告StackO...
- 这可能是最全面的SpringDataMongoDB开发笔记
-
MongoDB数据库,在最近使用越来越广泛,在这里和Java的开发者一起分享一下在Java中使用Mongodb的相关笔记。希望大家喜欢。关于MongoDB查询指令,请看我的上一篇文章。SpringD...
- Mac M2 本地部署ragflow
-
修改配置文件Dockerfile文件ARGNEED_MIRROR=1//开启国内镜像代理docker/.envREDIS_PORT=6380//本地redis端口冲突RAGFLOW_IMA...
- 别再傻傻分不清!localhost、127.0.0.1、本机IP,原来大有讲究!
-
调试接口死活连不上?部署服务队友访问不了?八成是localhost、127.0.0.1、本机IP用混了!这三个看似都指向“自己”的东西,差之毫厘谬以千里。搞不清它们,轻则调试抓狂,重则服务裸奔。loc...
- 我把 Mac mini 托管到机房了:一套打败云服务器的终极方案
-
我把我积灰的Macmini托管到机房了,有图有真相。没想到吧?一台在家吃灰的苹果电脑,帮我省了大钱!对,就是控制了自己的服务器,省了租用云服务器的钱,重要数据还全捏在自己手里,这感觉真爽。你可...
你 发表评论:
欢迎- 一周热门
-
-
Redis客户端 Jedis 与 Lettuce
-
高并发架构系列:Redis并发竞争key的解决方案详解
-
redis如何防止并发(redis如何防止高并发)
-
Java SE Development Kit 8u441下载地址【windows版本】
-
开源推荐:如何实现的一个高性能 Redis 服务器
-
redis安装与调优部署文档(WinServer)
-
Redis 入门 - 安装最全讲解(Windows、Linux、Docker)
-
一文带你了解 Redis 的发布与订阅的底层原理
-
Redis如何应对并发访问(redis控制并发量)
-
Oracle如何创建用户,表空间(oracle19c创建表空间用户)
-
- 最近发表
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle主从同步 (56)
- oracle 乐观锁 (53)
- redis 命令 (83)
- php redis (97)
- redis 存储 (67)
- redis 锁 (74)
- 启动 redis (73)
- redis 时间 (60)
- redis 删除 (69)
- redis内存 (64)
- redis并发 (53)
- redis 主从 (71)
- redis同步 (53)
- redis结构 (53)
- redis 订阅 (54)
- redis 登录 (62)
- redis 面试 (58)
- redis问题 (54)
- 阿里 redis (67)
- redis的缓存 (57)
- lua redis (59)
- redis 连接池 (64)