【Redis】 集群概念

zookeeper集群、solr集群、Redis集群的一些概念   1. zookeeper集群       zookeeper集群比较简单,重要的是理解其中有一个选举机制,官方建议配置节点数奇数个,因为因eader的选举机制要超过半数       且与启动顺序有关,比如,现在存在5个节点,启动顺序为1、2、3、4、5                  当1启动时,集群并未真的启动,因为没有leader、                  当2启动时... 阅读详情

概述

其实集群的概念很广泛。广义上,只要多个机器共同组成一个分布式系统,都可以叫集群。之前的主从复制、哨兵模式,也可以看成广义集群。Redis 这里说的集群,一般指 Redis Cluster。它主要解决的是存储空间不足的问题:把数据拆到多台机器上,每台机器只保存一部分数据。

哨兵模式解决的是可用性问题,但本质上还是主从节点都保存完整数据。只要数据全集超过单机能承受的内存,就需要引入分片。

分片

分片这个其实很形象,就像把数据一片一片分开。分片就是把数据拆成多份,分别放到不同节点上。

所以每一台机器上面的数据都是不一样的。

比如有 1TB 数据,可以这样拆:

  • 2 台机器,每台大约存 512GB。
  • 3 台机器,每台大约存 300 多 GB。
  • 4 台机器,每台大约存 256GB。

机器越多,每台机器承担的数据越少。但是实际部署时,每个存数据的主节点通常还要配从节点,用来提高可用性。所以扩容的时候并不是只需要一台,可能需要很多台机器。对于数据存放的思路,有以下几种算法可以实现。

哈希求余

在这里插入图片描述

哈希求余的思路是:

hash(key) % N

N 是分片数量。Redis 的数据都是 key-value 结构,所以可以先对 key 做 hash,再对分片数量求余,得到应该放到哪个分片。查询时也一样:key 不变,hash 函数不变,算出来的分片编号也不变。

这种方式简单,但是扩容很麻烦。因为一旦分片数量 N 改了,hash(key) % N 的结果会整体变化,很多数据都要重新搬运。

一致性哈希

在这里插入图片描述

一致性哈希把 hash 空间看成一个环,比如范围是 0 ~ 2^32 - 1。分片也落在这个环上,key 计算 hash 后,按环上的位置往顺时针跑,找到第一个分片的分割点,那就属于当前的分片。

就像图里的,原本只有分片 0、1、2。若新增分片 3,则扩容时不用让所有 key 重新分布,只需要搬动新节点影响到的一段数据。图中的 keyC 原本属于分片 0,现在顺时针跑遇到的第一个分片是 3,那么它就属于新分片 3 的范围。

优点:

  • 比哈希求余的数据搬运量小。
  • 扩容成本更低。

但有个问题是,如果节点分布不好,分片上的数据量可能不均匀,专业说法叫数据倾斜。

Redis 哈希槽

在这里插入图片描述

Redis Cluster 真正采用的是哈希槽方案,将哈希求余和一致性哈希结合起来。

slot = CRC16(key) % 16384

Redis Cluster 固定有 16384 个槽位,也就是 2^14 个。key 不是直接映射到分片,而是先映射到槽位,再由槽位映射到分片。

流程可以理解为:key -> 槽位 -> 分片。

扩容或迁移时,不需要按单个 key 去重新分配,而是迁移一部分槽位。

只有这些槽位对应的数据需要搬运,所以比简单的哈希求余更适合扩容。

例如 3 个分片时,可以大致这样分:

0 号分片:[0, 5461]
1 号分片:[5462, 10923]
2 号分片:[10924, 16383]

如果扩成 4 个分片,也可以从原来的几个分片中各拿出一部分槽位给新分片。这样每个分片大约持有 4096 个槽位。

槽位数量

Redis 使用 16384 个槽位,是一个折中的数量。可以简单算一下它的大小,看着很多,其实没占多少空间:

16384 bit = 2048 byte = 2KB

如果槽位太少,每个分片能分到的槽位少,数据均衡性不容易保证,某些槽位可能有很多 key,某些槽位也可能没有 key。

如果槽位太多,节点之间通信的元数据会变大。因为 Redis 之间需要通过心跳包检测各个节点的状态,如果槽位数量变成 65536,位图就会变成 8KB。虽然看着也不大,但是在这种频繁发送心跳包的场景里,网络带宽负担还是比较明显。

另外,每个节点需要表示自己持有哪些槽位,通常会用位图表示:第 i 位为 1,表示这个节点持有第 i 个槽位;第 i 位为 0,表示不持有。注意这里表示的是节点是否持有槽位,不是这个槽位里有没有 key。

总结

Redis Cluster 的核心是分片。主从复制和哨兵主要解决可用性,集群模式进一步解决单机存储容量限制。

了解Redis集群概念,集群如何选举主节点 像上文的Redis集群的A、B、C三个节点,主从模型可以为这每一个主节点添加一个副本节点。Redis集群重新分片可以将任意数量已指派给某个节点的槽改为指派给另一个节点,而相关槽所属的键值对也会从源节点被移动到目标节点。Redis 集群将数据自动分片到多个 Redis 节点,Redis 集群还在分区期间提供一定程度的可用性,当某些节点发生故障或无法通信时,Redis集群能够继续运行。Redis集群的主从模型选举主节点和Redis哨兵选举出主节点非常相似,但大家不要搞混了,Redis集群中并没有哨兵的概念。 阅读详情

相关推荐

Argoverse轨迹预测实战:从数据加载到地图API应用全解析

本文详细解析了Argoverse数据集在轨迹预测中的应用,从数据加载到地图API的实战技巧全涵盖。通过具体代码示例展示如何高效处理轨迹数据、实现可视化及基础预测模型,帮助开发者快速掌握自动驾驶轨迹预测的核心技术。特别介绍了Argoverse地图API的深度应用和性能优化经验。

weixin_29182481的博客 240

Redis数据库搭建集群(集群概念、redis集群介绍、搭建集群操作、Python与redis集群交互)

Redis数据库搭建集群(集群概念、redis集群介绍、搭建集群操作、Python与redis集群交互)

IT之一小佬的博客 8688

别再手动建模了!用Simscape Multibody Link一键导入SolidWorks装配体到Simulink

本文介绍了如何利用Simscape Multibody Link插件将SolidWorks装配体一键导入Simulink,实现CAD到仿真的无缝衔接。该技术显著提升机械系统设计与控制效率,特别适用于工业机器人、车辆悬架等复杂机构的动力学分析。文章详细解析了插件安装、模型导出优化及仿真验证的全流程,帮助工程师摆脱手动建模的低效工作模式。

weixin_27256197的博客 457

Redis学习16-Redis集群概念、分片

哨兵模式,提高了系统的可用性。但是真正用来存储数据的还是 master 和 slave 节点。所有的数据都需要存储在单个 master 和 slave 节点中。如果数据量很大,接近超出了 master / slave 所在机器的物理内存,就可能会有严重问题。大量数据一台机器搞不定了,用多台机器来搞。就是在上述的思路之下,,每一组 Master / Slave存储数据全集的一部分 ,从而构成一个更大的整体,称为 Redis 集群 (Cluster)。

jmlkid的博客 1508

用大白话讲解Carplay(原创)

用大白话讲解Carplay: Carplay是美国苹果公司开发的一套服务,用户通过这套服务可以将iPhone与车载系统连接,然后在车载大屏上操作使用iPhone手机。个人理解,Carplay不能叫车载系统,不是操作系统,只能算一种服务。让你在车上的大屏上使用iPhone,这样用起来更方便,不需要在手机小屏幕上操作。基于这一点,有些人也说Carplay就是个投屏的功能,将手机屏幕投屏到了车机大屏上。可以简单这么理解,但是并不只是投屏这么简单,如果只是投屏的话,车子只是起到了一个显示器的功能,其实不止,手机和

cici2013的专栏 2万+

道闸不自动落杆故障排查:从传感器原理到控制器调试全解析

在工业自动化和物联网系统中,传感器与控制器构成的闭环控制是保障设备可靠运行的核心。其基本原理是通过传感器采集环境状态,控制器依据预设逻辑做出决策并驱动执行器动作。这一技术价值在于实现了无人值守下的安全、高效自动化,广泛应用于智能交通、安防和智能楼宇等领域。以停车场道闸系统为例,其自动落杆功能高度依赖地感线圈与防砸雷达的协同。地感线圈作为触发单元,负责感知车辆接近;而防砸雷达则作为持续监测的安全单元,通过微波探测防砸区域内是否有障碍物,其信号是控制器执行落杆决策的关键依据。当系统出现车辆通过后闸杆不落的典型故

weixin_29190651的博客 307

redis集群的概念与部署

1redis集群概念 由多个Redis服务器组成的分布式网络服务集群; 每一个Redis服务器称为节点Node,节点之间会互相通信。两两相连; Redis集群无中心节点。 2集群节点复制 Redis集群的每个节点都有两种角色可选: 主节点Master node:用于存储数据; ...

chunhun2282的博客 168

【专栏必读】王道考研408操作系统+Linux系统编程万字笔记使用说明及章节导航

王道408考研操作系统)第一章计算机系统概述-第一节1、2:操作系统概念、概念和特征1:理解fork的作用prinf("还没有执行fork函数的本进程为:%d\n" , getpid());//其返回值是pid类型的 sleep(1);if(ret > 0) //父进程返回的是子进程ID {printf("我是父进程,我的id是:%d,我的孩子id是%d\n" , getpid() , ret);sleep(1);} } else if(ret == 0) //子进程fork返回值是0 {.........

快乐江湖的博客 3万+

Redis集群概念和配置

什么是集群: 集群是一组相互独立的,通过高速网络互联的计算机,它们构成一个组,并以单一系统的模式加以管理。 一个客户与集群相互作用时,集群像是一个独立的服务器。 集群配置是用于提高可用性和可缩放性。 为什么要集群: 之前我们了解了主从的概念,一主可以多从。如果同时的访问量过大,主服务器就可能boom 大公司都会有很多的服务器(华东地区、华南地区、华中地区、华北地区、西北西南等地区机房) redis...

weixin_44321942的博客 344

基于STM32L4XX、HAL库的ICM-42607-P姿态传感器驱动程序设计

/ 转换为dps(±1000dps量程)float accel_x = sensor_data.accel_x * (8.0f / 32768.0f);// 转换为g值(±8g量程)#define ICM42607_I2C_ADDR 0x68 << 1 // I2C地址(SA0=0)= 0x40) { // ICM-42607的WHO_AM_I值为0x40。// 读取传感器数据。

zhusl6688的博客 833

【ComfyUI】多模型 户型图风格渲染效果图

本文介绍了一种基于ComfyUI的室内户型图自动渲染工作流,将平面图转换为风格化效果图。该工作流通过RH_Captioner节点识别空间布局,结合Qwen2.5模型优化文本描述,再使用定制室内设计模型生成渲染图。整个流程包含图像输入、空间识别、文本组织、语言生成、风格转换和渲染输出等9个阶段,各节点协同完成从户型图到效果图的全自动转换。系统融合了语言理解和图像生成技术,可广泛应用于室内设计、装修可视化等领域。

Mr数据杨 3006

redis集群概念

1.1 集群的概念 所谓的集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态。 1.1.1 使用redis集群的必要性 问题:我们已经部署好了redis,并且能启动一个redis,实现数据的读写,为什么还要学习redis集群? 答:(1)单个redis存在不稳定性。当redis服务宕机了,就没有可用的服务了。 (2)单个redis的读写能力是有限的。 总结:redis集群是为了强化redis的读写能力。 1.1.2 如何学习...

weixin_57763462的博客 147

数学建模学习(121):Python实现模糊AHP(Fuzzy AHP)——从原理到实践

Python实现模糊AHP(Fuzzy AHP)

全栈川川 1539

Redis集群概念及安装流程

Redis集群(分布式) 概念 redis集群: 将多台服务器集中在一起,实现同一业务。 数据库集群和应用集群和功能集群 分布式: 将不同的业务分布在不同的地方,web应用和数据库服务是分开的 集群特性 可扩展性:集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能。动态添加服务器 高可用性:集群通过服务实体冗余使客户端免于轻易遇到out of servic...

qq_45273949的博客 232

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

redis集群概念了解

Redis 集群教程本文档是Redis集群的一般介绍,没有涉及复杂难懂的分布式概念的赘述,只是提供了从用户角度来如何搭建测试以及使用的方法,如果你打算使用并深入了解Redis集群,推荐阅读完本章节后,仔细阅读 Redis 集群规范 一章。本教程试图提供最终用户一个简单的关于集群和一致性特征的描述请注意,本教程使用于Redis3.0(包括3.0)以上版本如果你计划部署集群,那么我们建议你从阅读这个文...

qq_35690679的博客 376

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

redis 分区 、集群概念

分区 是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。分区可以让Redis管理更大的内存,Redis将可以使用所有机器的内存。如果没有分区,你最多只能使用一台机器的内存。分区使Redis的计算能力通过简单地增加计算机得到成倍提升,Redis的网络带宽也会随着计算机和网卡的增加而成倍增长。 分区实现原理: https://www.cnblogs.com/hjwub...

u014203449的博客 7274

WINCC7.3破解文件

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

010:Redis集群概念和配置

什么是集群: 集群是一组相互独立的,通过高速网络互联的计算机,它们构成一个组,并以单一系统的模式加以管理。 一个客户与集群相互作用时,集群像是一个独立的服务器。 集群配置是用于提高可用性和可缩放性。 为什么要集群: 之前我们了解了主从的概念,一主可以多从。如果同时的访问量过大,主服务器就可能boom 大公司都会有很多的服务器(华东地区、华南地区、华中地区、华北地区、西北西南等地区机房) r...

李玺 6407

Redis概念和集群搭建

一、redis的安装redis是一个key-value的缓存工具,3.0后的版本可以搭建集群,作用强大,像新浪微博就在用redis做缓存,下面介绍redis3.0的安装步骤: 1、下载redis的源码包 wget http://download.redis.io/releases/redis-3.2.3.tar.gz 2、解压源码包 tar -zxvf redis-3.2.3.tar.g

XXX 874

Redis 集群中 分片 和 槽 的概念

分片数量就是集群中Redis节点的数量。理论上,单机可以通过设置不同端口实现集群,但在实际应用中,是一个物理机对应一个节点,以免物理机挂掉影响多个节点,造成损失扩大。当然了,如果将Redis集群部署到云上,那另当别论。:slots是一个逻辑概念,属性是一个二进制位数组,数组长度为16384。2的14次幂,2048个字节。在没有明确指定到节点的时候,是没有具体的物理存储地址的。

孙晴 1578

redis映射的概念_NoSQL数据库:Redis集群概念及功能解析

Redis集群概念和集群节点特性这篇文档主要是为了说明正在进展中的Redis集群功能。文档主要分为两个部分,前一部分主要介绍我在非稳定分支已完成的代码,后一部分主要介绍还有哪些功能待实现。本文档所有的说明都有可能在将来由于设计原因而进行更改,而未实现的计划比已实现的功能更有可能会被更改。本文档包含了所有client library所需要的细节,但是client library的作者们需要提前意识到...

weixin_42469706的博客 120

Redis集群概念和结构概念

Redis是非关系型数据库,使用key value结构做存储 redis支持了string,list,hash,set,zset5种类型。 以下是一些基础结构 1.string结构 SDS结构,线程安全,防止溢出,惰性空间释放 2.list结构 双端,无环 3.dictionary结构 hash表实现,可以参考hashmap的实现 渐进rehash,新建B,然后后续使用的时候,慢慢从A->B...

sky_die的专栏 228

【Redis】深入探索 Redis 集群(Cluster)模式的概念、原理、数据分片算法,基于 Docker 模拟搭建 Redis 集群分布式架构

Redis Cluster 是一种分布式集群模式,它允许将数据分散存储在多个节点上,从而提供了横向扩展、高可用性和更大存储容量。Redis Cluster 有以下关键特点: 分布式数据存储: Redis Cluster 将数据划分为多个槽(slot),这些槽分布在不同的节点上。每个节点负责管理一部分槽中的数据,这样数据可以分布在多个节点上,避免了单节点存储容量的限制。 自动数据分片: Redis Cluster 使用哈希槽来分片数据,客户端根据键的哈希值将数据路由到正确的节点。这使得数据的分片和路由是自

qq_61635026的博客 4523

Redis Cluster集群概念

使用哨兵模式可以达到redis高可用目的,但是此时的每个Redis存有集群中的所有数据,从而导致集群的总数据存储量受限于可用存储内存最小的节点,形成了木桶效应。 在redis3.0之前,我们需要通过客户端(写代码)去做分片(数据拆分成多份),通过hash方式对key进行分片存储,客户端分片虽然能够解决各个节点的存储压力,但维护成本较高、增加、移除节点比较繁琐。 因此在redis3.0版本开始提供了...

qq_36331657的博客 306

Redis集群概念

redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。其redis-cluster架构图如下: 其结构特点:      1、所有的redis节点彼此互联

旧城以西的博客 317
上一篇: 【SpringCloud】微服务 Sentinel 详解
下一篇: 【Redis】主从复制局限性与哨兵概念、Docker 部署教程
Jul1en_
博客等级 码龄2年 275粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值