吃透Redis!你肯定没见过的Redis核心集群搭建,Cluster详解

我在面试被问懵:Redis 集群为什么只能用 0 号数据库? 在一次社招面试中,我被一句看似简单的提问难住了:“Redis 集群里到底怎么选择数据库?”原本以为理所当然的多 DB 概念,在集群模式下居然完全变了样。为了不再在相同的问题上翻车,我把背后的底层原理彻底啃透,并整理成这篇文章分享给你。 阅读详情

前言

Redis核心知识再更新!!!

今天,咱们继续Redis的学习内容。简单回顾一下之前的内容:从一开始的Redis基础结构,到后来的原理应用,再到现在的集群搭建,就是由浅及深的探究Redis的内核,争取彻底吃透他。

而且小编也会根据文章的长度适当断一下,为的就是让大家有一个更好的阅读体验,对内容吸收也是有好处的。如果感觉意犹未尽,随时欢迎大家评论区共同探讨交流哦~~~

今天,我们继续探究Redis的集群——集群完结篇。

集群 3:众志成城 —— Cluster

RedisCluster 是 Redis 的亲儿子,它是 Redis 作者自己提供的 Redis 集群化方案。 相对于 Codis 的不同,它是去中心化的,如图所示,该集群有三个 Redis 节点组成, 每个节点负责整个集群的一部分数据,每个节点负责的数据多少可能不一样。这三个节点相 互连接组成一个对等的集群,它们之间通过一种特殊的二进制协议相互交互集群信息。

Redis Cluster 将所有数据划分为 16384 的 slots,它比 Codis 的 1024 个槽划分得更为精细,每个节点负责其中一部分槽位。槽位的信息存储于每个节点中,它不像 Codis,它不 需要另外的分布式存储来存储节点槽位信息。 

当 Redis Cluster 的客户端来连接集群时,它也会得到一份集群的槽位配置信息。这样当客户端要查找某个 key 时,可以直接定位到目标节点。 

这点不同于 Codis,Codis 需要通过 Proxy 来定位目标节点,RedisCluster 是直接定 位。客户端为了可以直接定位某个具体的 key 所在的节点,它就需要缓存槽位相关信息,这样才可以准确快速地定位到相应的节点。同时因为槽位的信息可能会存在客户端与服务器不一致的情况,还需要纠正机制来实现槽位信息的校验调整。 另外,RedisCluster 的每个节点会将集群的配置信息持久化到配置文件中,所以必须确保配置文件是可写的,而且尽量不要依靠人工修改配置文件。

槽位定位算法

Cluster 默认会对 key 值使用 crc32 算法进行 hash 得到一个整数值,然后用这个整数 值对 16384 进行取模来得到具体槽位。 

def HASH_SLOT(key)
 s = key.index "{"
 if s
 e = key.index "}",s+1
 if e && e != s+1
 key = key[s+1..e-1]
 end
 end
 crc16(key) % 16384
end

跳转

当客户端向一个错误的节点发出了指令,该节点会发现指令的 key 所在的槽位并不归自己管理,这时它会向客户端发送一个特殊的跳转指令携带目标操作的节点地址,告诉客户端去连这个节点去获取数据。

 
GET x
-MOVED 3999 127.0.0.1:6381

MOVED 指令的第一个参数 3999 是 key 对应的槽位编号,后面是目标节点地址。 MOVED 指令前面有一个减号,表示该指令是一个错误消息。 

客户端收到 MOVED 指令后,要立即纠正本地的槽位映射表。后续所有 key 将使用新的槽位映射表。

迁移 

​Redis Cluster 提供了工具 redis-trib 可以让运维人员手动调整槽位的分配情况,它使用 Ruby 语言进行开发,通过组合各种原生的 Redis Cluster 指令来实现。这点 Codis 做得更加人性化,它不但提供了 UI 界面可以让我们方便的迁移,还提供了自动化平衡槽位工具,无需人工干预就可以均衡集群负载。不过 Redis 官方向来的策略就是提供最小可用的工具,其它都交由社区完成。

迁移过程

 

​Redis 迁移的单位是槽,Redis 一个槽一个槽进行迁移,当一个槽正在迁移时,这个槽就处于中间过渡状态。这个槽在原节点的状态为 migrating,在目标节点的状态为 importing,表示数据正在从源流向目标。 

迁移工具 redis-trib 首先会在源和目标节点设置好中间过渡状态,然后一次性获取源节点槽位的所有 key 列表(keysinslot 指令,可以部分获取),再挨个 key 进行迁移。每个 key  的迁移过程是以原节点作为目标节点的「客户端」,原节点对当前的 key 执行 dump 指令得 到序列化内容,然后通过「客户端」向目标节点发送指令 restore 携带序列化的内容作为参数,目标节点再进行反序列化就可以将内容恢复到目标节点的内存中,然后返回「客户端」 OK,原节点「客户端」收到后再把当前节点的 key 删除掉就完成了单个 key 迁移的整个过程。

从源节点获取内容 => 存到目标节点 => 从源节点删除内容。 

注意这里的迁移过程是同步的,在目标节点执行 restore 指令到原节点删除 key 之间,原节点的主线程会处于阻塞状态,直到 key 被成功删除。 

如果迁移过程中突然出现网络故障,整个 slot 的迁移只进行了一半。这时两个节点依旧 处于中间过渡状态。待下次迁移工具重新连上时,会提示用户继续进行迁移。 

在迁移过程中,如果每个 key 的内容都很小,migrate 指令执行会很快,它就并不会影响客户端的正常访问。如果 key 的内容很大,因为 migrate 指令是阻塞指令会同时导致原节点和目标节点卡顿,影响集群的稳定型。所以在集群环境下业务逻辑要尽可能避免大 key 的产生。

在迁移过程中,客户端访问的流程会有很大的变化。 

首先新旧两个节点对应的槽位都存在部分 key 数据。客户端先尝试访问旧节点,如果对 应的数据还在旧节点里面,那么旧节点正常处理。如果对应的数据不在旧节点里面,那么有两种可能,要么该数据在新节点里,要么根本就不存在。旧节点不知道是哪种情况,所以它会向客户端返回一个-ASK targetNodeAddr 的重定向指令。客户端收到这个重定向指令后,先 去目标节点执行一个不带任何参数的 asking 指令,然后在目标节点再重新执行原先的操作指 令。 

为什么需要执行一个不带参数的 asking 指令呢? 

因为在迁移没有完成之前,按理说这个槽位还是不归新节点管理的,如果这个时候向目标节点发送该槽位的指令,节点是不认的,它会向客户端返回一个-MOVED 重定向指令告诉它去源节点去执行。如此就会形成重定向循环。asking 指令的目标就是打开目标节点的选 项,告诉它下一条指令不能不理,而要当成自己的槽位来处理。

从以上过程可以看出,迁移是会影响服务效率的,同样的指令在正常情况下一个 ttl 就能完成,而在迁移中得3 个 ttl 才能搞定。

容错 

Redis Cluster 可以为每个主节点设置若干个从节点,单主节点故障时,集群会自动将其 中某个从节点提升为主节点。如果某个主节点没有从节点,那么当它发生故障时,集群将完全处于不可用状态。不过 Redis 也提供了一个参数 cluster-require-full-coverage 可以允许部分节点故障,其它节点还可以继续提供对外访问。

​网络抖动 

真实世界的机房网络往往并不是风平浪静的,它们经常会发生各种各样的小问题。比如 网络抖动就是非常常见的一种现象,突然之间部分连接变得不可访问,然后很快又恢复正常。 为解决这种问题,Redis Cluster 提供了一种选项 cluster-node-timeout,表示当某个节点持 续 timeout 的时间失联时,才可以认定该节点出现故障,需要进行主从切换。如果没有这个选项,网络抖动会导致主从频繁切换 (数据的重新复制)。 还有另外一个选项 cluster-slave-validity-factor 作为倍乘系数来放大这个超时时间来宽松容错的紧急程度。如果这个系数为零,那么主从切换是不会抗拒网络抖动的。如果这个系数大 于 1,它就成了主从切换的松弛系数。

​可能下线 (PFAIL-Possibly Fail) 与确定下线 (Fail) 

因为 Redis Cluster 是去中心化的,一个节点认为某个节点失联了并不代表所有的节点都 认为它失联了。所以集群还得经过一次协商的过程,只有当大多数节点都认定了某个节点失 联了,集群才认为该节点需要进行主从切换来容错。 Redis 集群节点采用 Gossip 协议来广播自己的状态以及自己对整个集群认知的改变。比 如一个节点发现某个节点失联了 (PFail),它会将这条信息向整个集群广播,其它节点也就可 以收到这点失联信息。如果一个节点收到了某个节点失联的数量 (PFail Count) 已经达到了集 群的大多数,就可以标记该节点为确定下线状态 (Fail),然后向整个集群广播,强迫其它节点也接收该节点已经下线的事实,并立即对该失联节点进行主从切换。

Cluster 基本使用 

​redis-py 客户端不支持 Cluster 模式,要使用 Cluster,必须安装另外一个包,这个包是依赖 redis-py 包的。 pip install redis-py-cluster

下面我们看看 redis-py-cluster 如何使用。

>>> from rediscluster import StrictRedisCluster
>>> # Requires at least one node for cluster discovery. Multiple nodes is recommended.
>>> startup_nodes = [{"host": "127.0.0.1", "port": "7000"}]
>>> rc = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True)
>>> rc.set("foo", "bar")
True
>>> print(rc.get("foo"))
'bar'

Cluster 是去中心化的,它有多个节点组成,构造 StrictRedisCluster 实例时,我们可以只用一个节点地址,其它地址可以自动通过这个节点来发现。不过如果提供多个节点地址,安全性会更好。如果只提供一个节点地址,那么当这个节点挂了,客户端就必须更换地址才可以继续访问 Cluster。 第二个参数 decode_responses 表示是否要将返回结果中的 byte 数组转换成 unicode。

Cluster 使用起来非常方便,用起来和普通的 redis-py 差别不大,仅仅是构造方式不同。但是它们也有相当大的不一样之处,比如 Cluster 不支持事务,Cluster 的 mget 方法相比 Redis 要慢很多,被拆分成了多个 get 指令,Cluster 的 rename 方法不再是原子的,它需要将数据从原节点转移到目标节点。

 

槽位迁移感知

如果 Cluster 中某个槽位正在迁移或者已经迁移完了,client 如何能感知到槽位的变化呢?客户端保存了槽位和节点的映射关系表,它需要即时得到更新,才可以正常地将某条指令发到正确的节点中。

我们前面提到 Cluster 有两个特殊的 error 指令,一个是 moved,一个是 asking。

第一个 moved 是用来纠正槽位的。如果我们将指令发送到了错误的节点,该节点发现对应的指令槽位不归自己管理,就会将目标节点的地址随同 moved 指令回复给客户端通知客户端去目标节点去访问。这个时候客户端就会刷新自己的槽位关系表,然后重试指令,后续所有打在该槽位的指令都会转到目标节点。

第二个 asking 指令和 moved 不一样,它是用来临时纠正槽位的。如果当前槽位正处于迁移中,指令会先被发送到槽位所在的旧节点,如果旧节点存在数据,那就直接返回结果了,如果不存在,那么它可能真的不存在也可能在迁移目标节点上。所以旧节点会通知客户端去新节点尝试一下拿数据,看看新节点有没有。这时候就会给客户端返回一个 asking error携带上目标节点的地址。客户端收到这个 asking error 后,就会去目标节点去尝试。客户端不会刷新槽位映射关系表,因为它只是临时纠正该指令的槽位信息,不影响后续指令。

重试 2 次 

moved 和 asking 指令都是重试指令,客户端会因为这两个指令多重试一次。读者有没有想过会不会存在一种情况,客户端有可能重试 2 次呢?这种情况是存在的,比如一条指令被发送到错误的节点,这个节点会先给你一个 moved 错误告知你去另外一个节点重试。所以客户端就去另外一个节点重试了,结果刚好这个时候运维人员要对这个槽位进行迁移操 作,于是给客户端回复了一个 asking 指令告知客户端去目标节点去重试指令。所以这里客户端重试了 2 次。

重试多次 

在某些特殊情况下,客户端甚至会重试多次,读者可以开发一下自己的脑洞想一想什么情况下会重试多次。 

正是因为存在多次重试的情况,所以客户端的源码里在执行指令时都会有一个循环,然后会设置一个最大重试次数,Java 和 Python 都有这个参数,只是设置的值不一样。当重试次数超过这个值时,客户端会直接向业务层抛出异常。

集群变更感知 

当服务器节点变更时,客户端应该即时得到通知以实时刷新自己的节点关系表。那客户 端是如何得到通知的呢?这里要分 2 种情况:  

​目标节点挂掉了,客户端会抛出一个 ConnectionError,紧接着会随机挑一个节点来 重试,这时被重试的节点会通过 moved error 告知目标槽位被分配到的新的节点地址。  

运维手动修改了集群信息,将 master 切换到其它节点,并将旧的 master 移除集群。这时打在旧节点上的指令会收到一个 ClusterDown 的错误,告知当前节点所在集群不可用 (当前节点已经被孤立了,它不再属于之前的集群)。这时客户端就会关闭所有的连接,清空槽位映射关系表,然后向上层抛错。待下一条指令过来时,就会重新尝试初始化节点信息。

好了,Redis的集群搭建,小编这里就整理完结了,希望能帮到大家更好的更新学习库存,提高认知。

喜欢小编请多多点赞评论分享,关注小编。后续小编会带来更多的学习更新,咱们共同进步!!!

redis-py-cluster:官方redis集群的Python集群客户端。 Redis 3.0+ redis-py-cluster 该客户端提供了Redis 3.0中添加的Redis集群客户端。 该项目是antirez的redis-rb-cluster的移植版,具有许多附加功能。 原始资源可以在找到 分支master将始终包含已从Pull Requests中合并的最新不稳定/开发代码。 使用master分支上的最新提交需要您自担风险,不能保证master分支上未标记的提交的兼容性或稳定性。 只有master分支上的标记发行版才被认为可以稳定使用。 Python 2兼容性说明 该库遵循我们上游软件包redis-py宣布的更改。 因此,我们将遵循此处所述的相同的python 2.7弃用时间表。 redis-py-cluster 2.1.x将是支持Python 2.7的最后一个主要版本。 2.1.x系列将继续获得支持Python 2的错误修复和安全补丁,直到2020年8月1日。red 立即下载

相关推荐

桁架 拓扑优化 matlab程序_拓扑优化在结构轻量化及板壳加筋肋最优布置的应用...

1 拓扑优化简介材料的有效利用一直都是人类追求的目标,也是许多研究领域不变的话题,并伴随着结构优化理论和方法的产生而发展。结构优化设计通常分为三个层次:(1)拓扑优化:在一个确定的连续区域内寻求结构内部非实体区域位置和数量的最佳配置,寻求结构中的构件布局及节点联结方式最优化,使结构能在满足应力、位移等约束条件下,将外载荷传递到结构支撑位置,同时使结构的某种性态指标达到最优;(2)形状优化:指在保持...

weixin_39525355的博客 1878

Redis集群——去中心化模式

之前介绍的主从模式和哨兵模式都只有一个master主节点,如果写操作并发比较大时,这两个模式就会堵塞。这时就可以使用集群化模式,也称之为去中心化模式,其特点是多master和多slave。

今天怎么又下雨的博客 4155

华为S5700三层交换机VLAN配置避坑指南:为什么你的VLAN间无法互通?

本文针对华为S5700三层交换机VLAN间无法互通的典型故障,提供深度排障指南。文章从数据转发原理入手,系统梳理了从物理链路、VLAN配置、VLANIF接口状态、路由表到ARP表、MTU及安全策略等全链路检查点,并给出了清晰的排查命令与流程,帮助网络工程师快速定位并解决VLAN间路由问题,实现稳定互通。

tt34567的博客 875

redis6主从复制及集群

redis主从复制和集群的搭建方式。

一条咸鱼的博客 1767

让 AI 学会“慢思考”:MCP Sequential Thinking 深度部署与使用指南

摘要: MCP Sequential Thinking 是一种让AI具备"慢思考"能力的技术,通过动态调整思维路径解决复杂问题。本文详细介绍了在Windows、macOS和Linux系统下的部署方法,包括环境准备、配置文件修改等步骤。该技术通过"产生想法-评估需求-修正路径"的循环机制,显著提升AI在代码设计、数学证明等复杂任务中的表现。文章还提供了验证安装方法、使用示例和常见问题解答,帮助开发者解锁AI的深层思考能力。(149字)

weixin_43236925的博客 1913

Java开发者必看:如何快速对接七大主流快递API(附完整代码示例)

本文为Java开发者提供了快速对接顺丰、京东、DHL等七大主流快递API的实战指南。文章深入剖析了不同API的认证、通信协议与参数差异,并提供了高可用的HTTP客户端配置、通用签名工具、SOAP请求处理以及可扩展的领域模型与适配层设计等完整代码示例,帮助开发者构建统一、健壮的物流集成框架,显著提升开发效率。

tech5的博客 728

Python脚本之操作Redis Cluster【二】

使用 redis-py-cluster 操作集群的key

谢智超的博客 2062

【2025软考高级架构师】基础知识部分——6、软件架构设计

(1)架构是对系统的抽象(2)架构由多个结构组成(3)任何软件都存在架构(4)元素及其行为的集合构成架构的内容(5)架构具有“基础”性(6)架构隐含有“决策”

qq837993702的博客 1万+

redis-py-cluster详述

前文讲了redis3.0引入cluster,怎么能少cluster对应的python client包呢? 1.start pip install redis-py-cluster >>> from rediscluster import StrictRedisCluster >>> startup_nodes = [{"host": "127.0.0.1", "port": "

secretx的专栏 9051

基于Simulink的四足机器人楼梯攀爬仿真模型

构建一个基于Simulink的四足机器人楼梯攀爬仿真模型,旨在模拟四足机器人在面对楼梯等障碍时的运动控制和稳定性调整。以下是一个详细的步骤指南,帮助你从零开始创建这样一个仿真模型。

xiaoheshang_123的博客 247

2024 年高教社杯全国大学生数学建模竞赛 E 题 交通流量管控 详细思路+matlab代码+python代码+论文范例

随着城市化进程的加快、机动车的快速普及,以及人们活动范围的不断扩大,城市道。景区周边道路上既有本地居民出行,也有过境车辆,化配置,在保证车辆通行的前提下,使得两条主路上的车流平均速度最大。对五一黄金周期间的数据进行分析,判定寻找停车位的巡游车辆,并估算假。相位通过的每辆车的信息,包括拍摄地点、行驶方向、拍摄时间和车牌号。济发展和百姓幸福感的一个“痛点”,是相关部门的棘手难题之一。纬中路交叉口,根据车流量的差异,可将一天分成若干个时段,估。是小镇中两条主路的情况:纬中路,从环西路到环东路,约。

YOLO 3310

【亲测免费】 Redis-Py-Cluster 使用教程

`redis-py-cluster` 是一个用于与 Redis 集群进行通信的 Python 客户端库。它是基于 `redis-rb-cluster` 项目的一个端口,并添加了许多额外的功能。该库支持 Redis 3.0 及以上版本,提供了对 Redis 集群的全面支持,包括集群的自动发现、故障转移、以及对集群命令的支持。 ### 主要特性 - **集群支持**:支持 Redis 集群的所有特...

gitblog_00951的博客 1735

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

redis cluster搭建_吃透Redis!你肯定没见过的Redis核心集群搭建,Cluster详解

前言Redis核心知识再更新!!!今天,咱们继续Redis的学习内容。简单回顾一下之前的内容:从一开始的Redis基础结构,到后来的原理应用,再到现在的集群搭建,就是由浅及深的探究Redis的内核,争取彻底吃透他。而且小编也会根据文章的长度适当断一下,为的就是让大家有一个更好的阅读体验,对内容吸收也是有好处的。如果感觉意犹未尽,随时欢迎大家评论区共同探讨交流哦~~~今天,我们继续探究Redis的集...

weixin_39895881的博客 126

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

redis将散裂中某个值自增_吃透Redis!你肯定没见过的Redis核心集群搭建,Cluster详解...

前言Redis核心知识再更新!!!今天,咱们继续Redis的学习内容。简单回顾一下之前的内容:从一开始的Redis基础结构,到后来的原理应用,再到现在的集群搭建,就是由浅及深的探究Redis的内核,争取彻底吃透他。而且小编也会根据文章的长度适当断一下,为的就是让大家有一个更好的阅读体验,对内容吸收也是有好处的。如果感觉意犹未尽,随时欢迎大家评论区共同探讨交流哦~~~今天,我们继续探究Redis的集...

weixin_42191440的博客 156

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【Redis架构优化篇】吃透16384个哈希槽!Redis Cluster分片机制与Linux实操教程

本文详细介绍了Redis Cluster的核心原理与3主3从集群搭建方法。Redis Cluster通过哈希槽分片机制实现数据分布式存储,采用Gossip协议进行节点通信,并支持MOVED/ASK重定向解决数据路由问题。文章提供了从环境准备、节点配置到集群创建的完整步骤,包括依赖安装、配置文件编写、集群启动等实操内容,帮助开发者快速搭建高可用Redis集群。

m0_58782205的博客 1022

一文吃透Redis集群:架构、原理、搭建与实战优化

Redis集群通过“哈希槽分片”实现了数据的分布式存储,突破了单机Redis的容量和性能瓶颈;通过“主从复制+自动故障转移”实现了高可用性,无需人工干预即可应对节点故障;通过“客户端智能路由”保证了访问效率,无需第三方中间件代理。适用场景:业务并发量高(QPS超过10万),单机Redis无法承载。数据量大(超过单机内存上限),需要分布式存储。业务对可用性要求高(需7x24小时服务),不能接受单点故障。

2301_82132279的博客 885

一文吃透 Redis 集群脑裂:成因、危害与全方位防护方案

在分布式系统中,“脑裂”是一个令人闻之色变的问题。想象一下:一个 Redis 集群在网络故障后分裂成两个独立的“小集群”,各自都认为自己是合法的主节点,都在接收客户端的写请求——结果就是数据像两个分叉的河流一样,再也无法汇合。这就是脑裂(Split-Brain)。很多人认为 Redis Cluster 是“高可用”的,但它真的能避免脑裂吗?不能完全避免,但可以通过设计和配置极大降低风险,甚至将影响降到最低。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1728

Redis核心概念与特点详解:从基础到实战,一文吃透

Redis的核心价值在于“高性能+高灵活+高可靠”:以全内存存储和单线程模型实现极致性能,以丰富的数据结构适配各类业务场景,以持久化和高可用方案保障数据安全和服务稳定,是互联网后端架构中不可或缺的核心中间件。其主要应用场景包括:缓存加速:缓存热点数据(商品信息、用户信息、配置数据),减轻数据库压力,提升接口响应速度;并发控制:实现分布式锁,解决跨服务、多节点的资源竞争问题(如秒杀、库存扣减);实时统计:计数器(播放量、阅读数)、UV统计(HyperLogLog)、排行榜(ZSet);

2301_82132279的博客 410

一文吃透 Redis 集群实现原理:从分片机制到故障转移全解析

当单机 Redis 面临内存瓶颈、写性能天花板或单点故障风险时,集群化就成了必经之路。但很多人对 Redis 集群的理解停留在“多台机器一起干活”的层面——它到底是怎么把数据分布到不同节点上的?节点之间如何通信?某个节点挂了怎么办?为什么集群最少需要 6 个节点(3主3从)?本文将带你深入 Redis Cluster 的底层原理,从哈希槽设计到 Gossip 协议,从故障转移到脑裂防护,一次性把 Redis 集群的核心机制讲透。整个键空间被划分为16384 个哈希槽,编号 0 到 16383每个键通过。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1552

老榕树的Java专题:一文吃透 Redis Cluster 集群:原理、Java 实战、生产踩坑与选型方案

摘要 Redis Cluster是解决单机Redis内存、QPS、高可用三大瓶颈的官方分布式方案,核心机制为16384哈希槽分片,支持多主节点水平扩展与自动故障转移。对比主从复制和哨兵模式,Cluster适用于高并发、大数据量场景(如电商热点缓存)。SpringBoot通过Lettuce和Redisson集成集群,需规避跨槽多键操作(可用哈希标签或单键循环优化)。生产环境需防范脑裂(配置min-replicas-to-write)、异步复制锁失效(RedLock兜底)、槽迁移性能损耗(智能客户端缓存路由)。

m0_62890527的博客 543

Redis架构演进:从主从到Cluster,读懂高可用与分布式核心

单节点Redis存在性能和单点故障隐患→主从复制解决读写分离和数据冗余→哨兵模式解决自动故障转移,实现高可用→Redis Cluster解决写压力集中和在线扩容,适配大型分布式场景。其中,哈希槽是Redis Cluster实现分片的核心,也是Redis与其他分布式存储方案的关键区别;而一致性哈希作为通用的分布式分片算法,了解它与哈希槽的差异,不仅能帮我们更好地理解Redis Cluster,也是面试中的高频考点。

深耕 Java 生态 | 从基础到架构,步步进阶 | 以技术实力角逐理想岗位 602

图文并茂、深入探讨Redis集群

然而,它也有一个比较大的缺陷,就是所有的数据都存放在单个主节点上,这样,存储的容量就受到了很大的限制,而且性能也会受到影响。前面提到,Redis Cluster对数据进行分片,然后水平分配到多个节点上,不同节点存储的数据是不一样的,所以它提升了系统的存储容量,同时,Redis Cluster还具备故障检测和自动恢复的机制,集群中的节点会相互检测健康状态。可以看出,Redis Cluster还是很强大的,它具备很强的伸缩性、高可用性,通过数据分片的方式,大大提升了Redis的存储容量,以及横向扩展的能力。

weixin_44742132的博客 387

第一篇:Redis 多节点高可用|从主从→哨兵→Cluster,理论与核心配置详解

很多人对 Redis 多节点高可用的理解一直是错的。大多数人觉得只要多启动几个 Redis 实例,就算完成高可用。但真正的 Redis 高可用,核心从来不是单纯增加节点数量,而是解决单点故障、数据副本备份、故障自动转移、数据分片扩容这一层层递进的问题。搞懂多节点背后的理论与配置,可以帮我们规避缓存服务宕机、数据丢失、业务雪崩等痛点,稳步提升缓存系统的可靠性。真正的 Redis 多节点高可用,不止是复制粘贴一堆配置文件,更高阶的核心是按需演进架构,匹配业务规模。

m0_62164804的博客 180

不把Redis知识点吃透还想面试大厂拿高薪?这份Redis超牛笔记送给你!(1)

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!33%;" />

2401_84009837的博客 641

Redis核心基本特性详解

Redis(Remote Dictionary Server,远程字典服务)是一款开源、高性能、内存型键值对NoSQL数据库,凭借极致的读写性能、丰富的数据结构、可靠的持久化机制和完善的分布式能力,成为分布式系统架构中不可或缺的核心中间件。相较于传统磁盘数据库(MySQL、Oracle)和普通缓存组件,Redis兼顾性能、功能与稳定性,可支撑高并发、低延迟的业务场景,广泛应用于互联网、金融、电商等领域。本文将系统性拆解Redis七大核心特性,结合原理与业务场景,帮大家吃透Redis基础核心能力。

wwd_001的博客 401
上一篇: 五年数据库专家,深入剖析高性能MySQL架构系统,不来后悔一辈子
下一篇: 深入探究MySql的性能优化,助力你的开发实战
Java领域指导者
博客等级 码龄7年 404粉丝 265原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值