Redis进阶实战来了!论Redis的集群应用,你还不懂的都在这里

《Redis集群搭建终极指南:实战全攻略》 本文详细介绍了Redis集群的搭建过程,从环境准备到节点配置、启动以及数据管理等。通过以上步骤,读者应能够在自己的环境中成功搭建并管理Redis集群。本文还涵盖了集群的管理与维护策略,包括故障处理、备份和性能优化等内容。希望本篇文章能帮助到你,如果有任何问题或疑问,欢迎讨论交流!如需深入了解Redis集群的更多特性与配置选项,可以参考Redis官方文档。 阅读详情

前言

之前咱们一直在更新Redis相关内容,从基本架构到原理实现。今天,咱们继续更新——Redis的集群搭建,由浅及深的吃透Redis。

Redis 集群提供了一种运行 Redis 的方式,其中数据在多个 Redis 节点间自动分区。Redis 集群还在分区期间提供一定程度的可用性,即在实际情况下能够在某些节点发生故障或无法通信时继续运行。但是,如果发生较大故障(例如,大多数主站不可用时),集群会停止运行。

Redis进阶实战来了!论Redis的集群应用,你还不懂的都在这里

 

集群 1:李代桃僵 —— Sentinel

上文我们提到,发生重大故障后,集群会停止运行,所以我们必须有一个高可用方案来抵抗节点故障,当故障发生时可以自动进行从主切换,程序可以不用重启,运维可以继续睡大觉,仿佛什么事也没发生一样。Redis 官方提供了这样一种方案 —— Redis Sentinel(哨兵)。

Redis进阶实战来了!论Redis的集群应用,你还不懂的都在这里

我们可以将 Redis Sentinel 集群看成是一个 ZooKeeper 集群,它是集群高可用的心脏, 它一般是由 3~5 个节点组成,这样挂了个别节点集群还可以正常运转。 它负责持续监控主从节点的健康,当主节点挂掉时,自动选择一个最优的从节点切换为 主节点。客户端来连接集群时,会首先连接 sentinel,通过 sentinel 来查询主节点的地址, 然后再去连接主节点进行数据交互。当主节点发生故障时,客户端会重新向 sentinel 要地 址,sentinel 会将最新的主节点地址告诉客户端。如此应用程序将无需重启即可自动完成节点切换。比如上图的主节点挂掉后,集群将可能自动调整为下图所示结构。

Redis进阶实战来了!论Redis的集群应用,你还不懂的都在这里

从这张图中我们能看到主节点挂掉了,原先的主从复制也断开了,客户端和损坏的主节 点也断开了。从节点被提升为新的主节点,其它从节点开始和新的主节点建立复制关系。客户端通过新的主节点继续进行交互。Sentinel 会持续监控已经挂掉了主节点,待它恢复后, 集群会调整为下面这张图。

Redis进阶实战来了!论Redis的集群应用,你还不懂的都在这里

此时原先挂掉的主节点现在变成了从节点,从新的主节点那里建立复制关系。

消息丢失

Redis 主从采用异步复制,意味着当主节点挂掉时,从节点可能没有收到全部的同步消 息,这部分未同步的消息就丢失了。如果主从延迟特别大,那么丢失的数据就可能会特别多。Sentinel 无法保证消息完全不丢失,但是也尽可能保证消息少丢失。它有两个选项可以限制主从延迟过大。

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

 

第一个参数表示主节点必须至少有一个从节点在进行正常复制,否则就停止对外写服 务,丧失可用性。

何为正常复制,何为异常复制?这个就是由第二个参数控制的,它的单位是秒,表示如 果 10s 没有收到从节点的反馈,就意味着从节点同步不正常,要么网络断开了,要么一直没有给反馈。

Sentinel 基本使用

接下来我们看看客户端如何使用 sentinel,标准的流程应该是客户端可以通过 sentinel 发现主从节点的地址,然后在通过这些地址建立相应的连接来进行数据存取操作。我们来看看 Python 客户端是如何做的。

>>> from redis.sentinel import Sentinel
>>> sentinel = Sentinel([('localhost', 26379)], socket_timeout=0.1)
>>> sentinel.discover_master('mymaster')
('127.0.0.1', 6379)
>>> sentinel.discover_slaves('mymaster')
[('127.0.0.1', 6380)]

 

sentinel 的默认端口是 26379,不同于 Redis 的默认端口 6379,通过 sentinel 对象的 discover_xxx 方法可以发现主从地址,主地址只有一个,从地址可以有多个。

>>> master = sentinel.master_for('mymaster', socket_timeout=0.1)
>>> slave = sentinel.slave_for('mymaster', socket_timeout=0.1)
>>> master.set('foo', 'bar')
>>> slave.get('foo')
'bar'

 

通过 xxx_for 方法可以从连接池中拿出一个连接来使用,因为从地址有多个,redis 客户端对从地址采用轮询方案,也就是 RoundRobin 轮着来。

有个问题是,但 sentinel 进行主从切换时,客户端如何知道地址变更了 ? 通过分析源码,我发现 redis-py 在建立连接的时候进行了主库地址变更判断。

连接池建立新连接时,会去查询主库地址,然后跟内存中的主库地址进行比对,如果变更了,就断开所有连接,重新使用新地址建立新连接。如果是旧的主库挂掉了,那么所有正在使用的连接都会被关闭,然后在重连时就会用上新地址。

但是这样还不够,如果是 sentinel 主动进行主从切换,主库并没有挂掉,而之前的主库连接已经建立了在使用了,没有新连接需要建立,那这个连接是不是一直切换不了?

继续深入研究源码,我发现 redis-py 在另外一个点也做了控制。那就是在处理命令的时 候捕获了一个特殊的异常 ReadOnlyError,在这个异常里将所有的旧连接全部关闭了,后续指令就会进行重连。

主从切换后,之前的主库被降级到从库,所有的修改性的指令都会抛出 ReadonlyError。 如果没有修改性指令,虽然连接不会得到切换,但是数据不会被破坏,所以即使不切换也没关系。

集群 2:分而治之 —— Codis

在大数据高并发场景下,单个 Redis 实例往往会显得捉襟见肘。首先体现在内存上,单个 Redis 的内存不宜过大,内存太大会导致 rdb 文件过大,进一步导致主从同步时全量同步时间过长,在实例重启恢复时也会消耗很长的数据加载时间,特别是在云环境下,单个实例内存往往都是受限的。其次体现在 CPU 的利用率上,单个 Redis 实例只能利用单个核心,这单个核心要完成海量数据的存取和管理工作压力会非常大。

正是在这样的大数据高并发的需求之下,Redis 集群方案应运而生。它可以将众多小内 存的 Redis 实例综合起来,将分布在多台机器上的众多 CPU 核心的计算能力聚集到一起, 完成海量数据存储和高并发读写操作。

Redis进阶实战来了!论Redis的集群应用,你还不懂的都在这里

 

Codis 是 Redis 集群方案之一,令我们感到骄傲的是,它是中国人开发并开源的,来自前豌豆荚中间件团队。绝大多数国内的开源项目都不怎么靠谱,但是 Codis 非常靠谱。

从 Redis 的广泛流行到 RedisCluster 的广泛使用之间相隔了好多年,Codis 就是在这样的市场空缺的机遇下发展出来的。大型公司有明确的 Redis 在线扩容需求,但是市面上没有特别好的中间件可以做到这一点。

Redis进阶实战来了!论Redis的集群应用,你还不懂的都在这里

 

Codis 使用 Go 语言开发,它是一个代理中间件,它和 Redis 一样也使用 Redis 协议 对外提供服务,当客户端向 Codis 发送指令时,Codis 负责将指令转发到后面的 Redis 实例来执行,并将返回结果再转回给客户端。

Codis 上挂接的所有 Redis 实例构成一个 Redis 集群,当集群空间不足时,可以通过动态增加 Redis 实例来实现扩容需求。

客户端操纵 Codis 同操纵 Redis 几乎没有区别,还是可以使用相同的客户端 SDK,不需要任何变化。

因为 Codis 是无状态的,它只是一个转发代理中间件,这意味着我们可以启动多个 Codis 实例,供客户端使用,每个 Codis 节点都是对等的。因为单个 Codis 代理能支撑的 QPS 比较有限,通过启动多个 Codis 代理可以显著增加整体的 QPS 需求,还能起到容灾功 能,挂掉一个 Codis 代理没关系,还有很多 Codis 代理可以继续服务。

Redis进阶实战来了!论Redis的集群应用,你还不懂的都在这里

 

Codis 分片原理

Codis 要负责将特定的 key 转发到特定的 Redis 实例,那么这种对应关系 Codis 是如 何管理的呢? Codis 将所有的 key 默认划分为 1024 个槽位(slot),它首先对客户端传过来的 key 进行 crc32 运算计算哈希值,再将 hash 后的整数值对 1024 这个整数进行取模得到一个余 数,这个余数就是对应 key 的槽位。

Redis进阶实战来了!论Redis的集群应用,你还不懂的都在这里

 

每个槽位都会唯一映射到后面的多个 Redis 实例之一,Codis 会在内存维护槽位和 Redis 实例的映射关系。这样有了上面 key 对应的槽位,那么它应该转发到哪个 Redis 实例就很明确了。

hash = crc32(command.key)
slot_index = hash % 1024
redis = slots[slot_index].redis
redis.do(command)

 

槽位数量默认是 1024,它是可以配置的,如果集群节点比较多,建议将这个数值配置大一些,比如 2048、4096。

不同的 Codis 实例之间槽位关系如何同步?

如果 Codis 的槽位映射关系只存储在内存里,那么不同的 Codis 实例之间的槽位关系就无法得到同步。所以 Codis 还需要一个分布式配置存储数据库专门用来持久化槽位关系。 Codis 开始使用 ZooKeeper,后来连 etcd 也一块支持了。

Redis进阶实战来了!论Redis的集群应用,你还不懂的都在这里

 

Codis 将槽位关系存储在 zk 中,并且提供了一个 Dashboard 可以用来观察和修改槽位 关系,当槽位关系变化时,Codis Proxy 会监听到变化并重新同步槽位关系,从而实现多个 Codis Proxy 之间共享相同的槽位关系配置。

扩容

刚开始 Codis 后端只有一个 Redis 实例,1024 个槽位全部指向同一个 Redis。然后一 个 Redis 实例内存不够了,所以又加了一个 Redis 实例。这时候需要对槽位关系进行调整, 将一半的槽位划分到新的节点。这意味着需要对这一半的槽位对应的所有 key 进行迁移,迁 移到新的 Redis 实例。

那 Codis 如果找到槽位对应的所有 key 呢?

Codis 对 Redis 进行了改造,增加了 SLOTSSCAN 指令,可以遍历指定 slot 下所有的 key。Codis 通过 SLOTSSCAN 扫描出待迁移槽位的所有的 key,然后挨个迁移每个 key 到新的 Redis 节点。

在迁移过程中,Codis 还是会接收到新的请求打在当前正在迁移的槽位上,因为当前槽 位的数据同时存在于新旧两个槽位中,Codis 如何判断该将请求转发到后面的哪个具体实例呢?

Codis 无法判定迁移过程中的 key 究竟在哪个实例中,所以它采用了另一种完全不同的思路。当 Codis 接收到位于正在迁移槽位中的 key 后,会立即强制对当前的单个 key 进行迁移,迁移完成后,再将请求转发到新的 Redis 实例。

slot_index = crc32(command.key) % 1024
if slot_index in migrating_slots:
do_migrate_key(command.key) # 强制执行迁移
redis = slots[slot_index].new_redis
else:
redis = slots[slot_index].redis
redis.do(command)

 

我们知道 Redis 支持的所有 Scan 指令都是无法避免重复的,同样 Codis 自定义的 SLOTSSCAN 也是一样,但是这并不会影响迁移。因为单个 key 被迁移一次后,在旧实例中它就彻底被删除了,也就不可能会再次被扫描出来了。

自动均衡

Redis 新增实例,手工均衡 slots 太繁琐,所以 Codis 提供了自动均衡功能。自动均衡会在系统比较空闲的时候观察每个 Redis 实例对应的 Slots 数量,如果不平衡,就会自动进行迁移。

Codis 的代价

Codis 给 Redis 带来了扩容的同时,也损失了其它一些特性。因为 Codis 中所有的 key 分散在不同的 Redis 实例中,所以事务就不能再支持了,事务只能在单个 Redis 实例中完成。同样 rename 操作也很危险,它的参数是两个 key,如果这两个 key 在不同的 Redis 实例中,rename 操作是无法正确完成的。Codis 的官方文档中给出了一系列不支持的命令列 表。

同样为了支持扩容,单个 key 对应的 value 不宜过大,因为集群的迁移的最小单位是 key,对于一个 hash 结构,它会一次性使用 hgetall 拉取所有的内容,然后使用 hmset 放置 到另一个节点。如果 hash 内部的 kv 太多,可能会带来迁移卡顿。官方建议单个集合结构 的总字节容量不要超过 1M。如果我们要放置社交关系数据,例如粉丝列表这种,就需要注意了,可以考虑分桶存储,在业务上作折中。

Codis 因为增加了 Proxy 作为中转层,所有在网络开销上要比单个 Redis 大,毕竟数据 包多走了一个网络节点,整体在性能上要比单个 Redis 的性能有所下降。但是这部分性能损 耗不是太明显,可以通过增加 Proxy 的数量来弥补性能上的不足。

Codis 的集群配置中心使用 zk 来实现,意味着在部署上增加了 zk 运维的代价,不过大部分互联网企业内部都有 zk 集群,可以使用现有的 zk 集群使用即可。

Codis 的优点

Codis 在设计上相比 Redis Cluster 官方集群方案要简单很多,因为它将分布式的问题交 给了第三方 zk/etcd 去负责,自己就省去了复杂的分布式一致性代码的编写维护工作。而 Redis Cluster 的内部实现非常复杂,它为了实现去中心化,混合使用了复杂的 Raft 和 Gossip 协议,还有大量的需要调优的配置参数,当集群出现故障时,维护人员往往不知道从 何处着手。

MGET 指令的操作过程

Redis进阶实战来了!论Redis的集群应用,你还不懂的都在这里

 

mget 指令用于批量获取多个 key 的值,这些 key 可能会分布在多个 Redis 实例中。 Codis 的策略是将 key 按照所分配的实例打散分组,然后依次对每个实例调用 mget 方法, 最后将结果汇总为一个,再返回给客户端。

架构变迁

Codis 作为非官方 Redis 集群方案,近几年来它的结构一直在不断变化,一方面当官方 的 Redis 有变化的时候它要实时去跟进,另一方面它作为 Redis Cluster 的竞争方案之一, 它还得持续提高自己的竞争力,给自己增加更多的官方集群所没有的便捷功能。 比如 Codis 有个特色的地方在于强大的 Dashboard 功能,能够便捷地对 Redis 集群进 行管理。这是 Redis 官方所欠缺的。另外 Codis 还开发了一个 Codis-fe(federation 联邦) 工 具,可以同时对多个 Codis 集群进行管理。在大型企业,Codis 集群往往会有几十个,有这 样一个便捷的联邦工具可以降低不少运维成本。

Codis 不是 Redis 官方项目,这意味着它的命运会无比曲折,它总是要被官方 Redis 牵 着牛鼻子走。当 Redis 官方提供了什么功能它欠缺时,Codis 就会感到恐惧,害怕自己被市 场甩掉,所以必须实时保持跟进。

同时因为 Codis 总是要比 Redis 官方慢一拍,Redis 官方提供的最新功能,Codis 往往 要等很久才能同步。比如现在 Redis 已经进入到 4.0 阶段,提供了插件化 Redis-Module 支 持,目前 Codis 还没有提供解决方案。

现在 Redis-Cluster 在业界已经逐渐流行起来,Codis 能否持续保持竞争力是个问题,我们看到 Codis 在不断的差异化竞争,竞争的方法就体现在工具上,而不是内核,这个和官方的路线真是相反的,官方对工具无暇顾及,只提供基本的工具,其它完全交给第三方去开发。

以上就是小编整理的Redis集群介绍,有写的不准确的地方,还请各位大佬多多批评指出,咱们共同进步。

感觉小编的整理还不错的,请多多点赞评论分享,关注小编,后续小编会在更来更多学习内容,咱们每天进步一点点!!!

Redis?集群方案 由于Redis出众的性能,其在众多的移动互联网企业中得到广泛的应用。Redis在3.0版本前只支持单实例模式,虽然现在的服务器内存可以到100GB、200GB的规模,但是单实例模式限制了Redis没法满足业务的需求(例如新浪微博就曾经用Redis存储了超过1TB的数据)。Redis的开发者Antirez早在博客上就提出在Redis 3.0版本中加入集群的功能,但3.0版本等到2015年才发布正 阅读详情

相关推荐

Redis集群知识及实战

Redis 集群是一种提供自动数据分片、高可用性和线性扩展性的数据存储解决方案,可以将数据自动分配到多个节点上,这种分布式存储的方式称为分片(sharding)。这样可以使得数据存储的容量和处理能力随着节点的增加而扩展,如果某个节点发生故障,集群可以自动将请求重定向到健康的节点,从而保证服务的连续性和数据的可用性。Redis 集群支持读写分离,Redis 集群提供了自动化的节点管理功能,包括自动故障检测、自动故障转移和自动重新分片等,随着业务的增长,Redis 集群可以通过增加更多的节点来扩展其处理能力和存

2643

golang redis的Do方法与send方法

研究redis方法的时候看到有大佬讲说send()方法的性能数倍与Do()方法 不使用管道提交 rc := RedisClient.Get() defer rc.Close() currentTimeStart := time.Now() for i:=0 ;i<100000;i++{ fmt.Println(i) rc.Do("INCR","TESTKEY") } currentTimeEnd := time.Now() fmt.Println(currentTime

weixin_41479678的博客 3812

【CMU-自主导航与规划】Autonomous Exploration Development Environment 实战:从环境搭建到多场景测试

本文详细介绍了CMU开源自主导航开发环境(Autonomous Exploration Development Environment)的实战部署与测试。内容涵盖从Ubuntu与ROS环境搭建、仿真场景配置,到核心导航模块(地形分析、局部避障、航点跟踪)的深度解析,并演示了如何集成TARE探索与FAR规划等上层算法,最终指导连接真实SLAM与实车部署,完成多场景性能评估。

weixin_29215391的博客 707

Redis 实战 —— 04. Redis 数据结构常用命令简介

字符串 P39 Redis 的字符串是一个有字节组成的序列,可以存储以下 3 种类型的值:字节串(byte string)、整数、浮点数。 在需要的时候, Redis 会将整数转换成浮点数。整数的取值范围和系统的长整型(long)的相同,浮点数取值范围和精度与 IEEE 754 标准下的双精度浮点数(double)的相同。 Redis 中的自增命令和自减命令 P39 命令 格式 描述 INCR INCR key 将键存储的数字值加上 1 DECR DECR key 将键存储的数字值减去

idealism_xxm的专栏 333

A股历史数据免费下载终极指南:4000+个股数据一键打包获取

本文提供了获取A股历史数据的完整免费方案,重点介绍了Tushare Pro、AkShare等开源金融数据API的使用方法。通过详细的Python脚本示例,指导读者如何自动化批量抓取、清洗、存储4000多只个股的历史行情数据,并分享数据质量校验与性能优化技巧,助力量化研究与市场分析。

ooo22的博客 2252

(二)目标检测之 HOG+SVM 算法

文章目录一、概述二、方法概述三、积分图四、AdaBoost五、级联检测六、结果七、复现八、总结参考资料 一、概述   梯度直方图HOG(Histogram of Oriented Gradients)是法国人Dalal在2005年CVPR会议上提出的特征提取算法,并将其与 SVM 配合,用于行人检测。论文地址:Histograms of oriented gradients for human detection HOG有个优点,提取的边缘和梯度特征能很好的抓住局部形状的特点,且因是对图像做了Gamma

天青如水的博客 1万+

golang入门笔记—redis

golang连接和初始化redis package main import ( "context" "fmt" "time" "github.com/go-redis/redis/v8" ) var redisdb *redis.Client func initRedis() (err error) { redisdb = redis.NewClient(&redis.Options{ Addr: "127.0.0.1:6379", Password: "",

qq_43716830的博客 1251

【滚雪球学数学建模】第1节·建模入门+三步法+案例

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 6413

Golang redis(二)redigo连接详解

redis连接: go 连接redis主要使用conn.go文件中的连接函数, 一般使用Dial, DialURL 当然也有 NewConn 创建于redis的连接, 在应用程序使用完毕后必须调用连接的Close() 方法将连接关闭,否则,有可能出现连接池溢出的问题 1.Dail dial定义 func Dial(network, address string, options ...DialOp...

comprel的博客 7819

1. SAP Business Application Studio 里创建一个基于 CAP 模型的最简单的 OData 服务

本文基于 SAP Cloud Application Programming 编程模型的 OData 服务开发教程的第一步,简述了 SAP Business Technology Platform 里 Business Application Studio 开发工具的打开方式,创建 Dev Space 以及 CAP 项目的创建步骤,以及如何通过 schema.cds 和 service.cds 分别创建 OData 模型和 OData 服务,最后通过 ports preview 打开 OData 服务预览页

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1803

【RTD】二分法查找和分段线性插值算法在RTD中应用

二分法查找和分段线性插值算法在RTD中的典型应用。

只要思想不滑坡,想法总比问题多。 2376

【Redis进阶】Redis集群

数据分片(Data Sharding)是一种将数据集分割成更小的部分(称为"片"或"分片")并分布到多个存储单元(如数据库或服务器)上的技术。每个分片只存储数据集的一部分,从而使得系统能够水平扩展,处理更大规模的数据量和更高的并发请求。Redis Cluster使用数据分片实现key的存储分布Redis Cluster将集群划分为16384个槽位,数据库中所有的key进行hash计算后,都会落到16384个槽位中的其中一个槽位。

2401_83045332的博客 1773

[低代码 + AI] 明道云与 Dify 的三种融合实践方式详解

融合方式技术路径优点局限或注意事项UI 嵌入iframe 表单嵌入快速集成、用户体验一致无法自定义交互逻辑明道云调用 DifyAPI 请求节点工作流自动化、逻辑灵活有 timeout 限制、需优化 promptDify 调用明道云插件或 API 调用节点可查询实际业务数据、增强 AI 智能需理解明道云 API 结构、权限设置复杂明道云与 Dify 的结合为低代码平台注入了智能动力。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1187

Redis集群

1.问题 容量不够,redis如何进行扩容? 并发写操作, redis如何分摊? 另外,主从模式,薪火相传模式,主机宕机,导致ip地址发生变化,应用程序中配置需要修改对应的主机地址、端口等信息。 之前通过代理主机来解决,但是redis3.0中提供了解决方案。就是无中心化集群配置。 2. 什么是集群 Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。 Redis 集群通过分区(partition)来提供一定程度的可用性

weixin_45829957的博客 3万+

在ParaView中编程实现涡量可视化

综上所述,本文介绍了在ParaView中使用编程方式实现涡量可视化的方法,并提供了相应的Python代码示例。通过灵活运用ParaView的编程接口,我们可以根据特定需求定制复杂的数据可视化流程,进一步深入了解和分析流体的旋转行为。ParaView是一款强大的开源数据可视化工具,它提供了丰富的功能和灵活的编程接口,使用户能够定制数据可视化流程。你可以根据需要自定义颜色映射范围和颜色,上述代码中的RGBPoints列表中包含了两个点,分别对应涡量值为0和10时的颜色。在实际使用过程中,你需要替换代码中的。

ByteProwl的博客 1437

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

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

Redis实战--Redis集群的搭建与使用

Redis是一个开源的高性能key-value数据库,它以其出色的性能和丰富的特性而广受欢迎。随着业务的发展,单机Redis可能无法满足大规模数据存储和高并发访问的需求。这时,Redis集群就显得尤为重要。本文将详细介绍Redis集群的概念、搭建过程以及使用Jedis操作Redis集群的实践。

天冬忘忧的博客 1290

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【Redis 进阶】集群

Redis集群是一种分布式存储解决方案,通过多组Master/Slave架构实现数据的高可用性和分布式存储。集群采用数据分片算法,如哈希求余、一致性哈希和哈希槽分区算法,来分配和定位数据。哈希槽分区算法是Redis集群的核心,它将数据划分为16384个槽位,每个节点负责一部分槽位,支持灵活扩展和数据均匀分布。集群的故障转移机制依赖于节点间的心跳包通信,通过主观下线和客观下线判定节点状态,并触发故障迁移。此外,集群支持扩容,通过添加新节点和重新分配槽位来扩展存储能力。

2301_79816047的博客 1149

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Redis集群之主从、哨兵、分片集群,SpringBoot整合Redis集群

在我看来主从集群和哨兵这都不能算是真正的集群,只有Redis集群模式才是真的集群。 可能看到这么说大家会很疑惑,那么请看下面相信你一定会有所获。 Redis集群中文文档 之前一直担心搭建集群虚拟机内存不足,搭建完发现6个Redis只用了0.1G内存 文章目录一、主从集群二、哨兵集群2-1、哨兵的作用2-2、哨兵原理三、分片集群3-1、分片集群简单理解3-2、分片集群深入理解3-3、Redis集群图3-4、其它补充三、集群搭建3-1、环境准备3-2、配置文件修改3-3、启动全部的redis3-4、.

小道仙的后宫 3824

Springboot整合Redis集群实战详解

针对的主要是master宕机的情况,我们发现所有节点的数据都是一样的,那么一旦数据量过大,redis也会效率下降的问题。redis3.0版本正式推出后,有效地解决了Redis分布式方面的需求,当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构方法达到负载均衡的目的。Redis集群的节点,通常是三个master以上节点,每个master节点至少有一个slave节点。通过关闭某个集群节点的master节点,slave节点会切换成master代替故障节点完成其工作。..................

陌守 1万+

【Redis进阶】集群

介绍了redis集群相关知识,比如集群分片算法,如哈希求余、一致性哈希、哈希槽分区算法,以及集群的故障恢复raft算法流程

weixin_62533201的博客 1341

Redis 3种集群方式,别傻傻分不清!

文章目录Redis 3种集群方式,别傻傻分不清!1 redis 主从模式配置前言redis 主从模式配置首先更改配置文件 (redis.windows.conf )配置主从配置 (redis.windows.conf )其他配置参数:2 redis 哨兵模式(一主一从两哨兵)前言redis 哨兵模式配置哨兵3 Redis集群版准备下载安装redis下载Ruby并安装下载安装Redis的Ruby驱...

. 8027

【Redis快速入门】Redis三种集群搭建配置(主从集群、哨兵集群、分片集群)

Redis集群🔥🔥🔥 写在前面:🧸 本章是基于CentOS7下的Redis集群教程,包括: 单机安装Redis Redis主从 Redis分片集群 1.单机安装Redis🧸.........

鱼干的博客 5020

Redis进阶

正常业务下,一个请求查询到数据后,我们可以将这个数据保存在Redis之后的请求都可以直接从Redis查询,就不需要再连接数据库了如果一个请求查询的数据,数据库中没有会发生什么事情?它会先查询Redis,Redis没有会查询数据库,数据库也没有这就是缓存穿透因为数据库中没有数据,所以Redis也无法保存数据,如果这个请求反复出现,就会反复连接数据库,严重的导致数据库性能降低甚至宕机。

m0_67409608的博客 944

五、Redis 主从集群 —— 超详细操作演示!

对于Master宕机后的冷处理方式是无法实现高可用的。Redis 从 2.6 版本开始提供了高可用的解决方案Sentinel哨兵机制。在集群中再引入一个节点,该节点充当Sentinel哨兵,用于监视Master的运行状态,并在 Master 宕机后自动指定一个Slave作为新的Master。整个过程无需人工参与,完全由哨兵自动完成。不过,此时的Sentinel哨兵又成为了一个单点故障点:若哨兵发生宕机,整个集群将瘫痪。所以为了解决Sentinel的单点问题,又要为Sentinel创建一个集群,即。

weixin_43412762的博客 2857

Redis 集群

一个 Redis 集群包含 16384 个插槽(hash slot), 数据库中的每个键都属于这 16384 个插槽的其中一个,集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和。集群中的每个节点负责处理一部分插槽。举个例子, 如果一个集群可以有主节点, 其中:节点 A 负责处理 0 号至 5460 号插槽。节点 B 负责处理 5461 号至 10922 号插槽。

m0_51101158的博客 1982

redis集群

redis集群

Sunseted的博客 2243
上一篇: 干货来袭,请注意!SSM框架全解析,深入理解有奇效
下一篇: 五年数据库专家,深入剖析高性能MySQL架构系统,不来后悔一辈子
Java领域指导者
博客等级 码龄7年 404粉丝 265原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值