首页 > 数据库 >redis集群新增结点slot迁移原理

redis集群新增结点slot迁移原理

时间:2022-08-20 13:46:38浏览次数:74  
标签:slot 结点 redis 集群 迁移 节点

redis集群新增结点slot迁移原理

写在前面:最近在复习redis知识点,遇到一个问题很疑惑,就是集群新增结点时,是将slot重新分配,然后移动?这样集群节点之间不就需要互相传送数据吗,但是又明确知道是所有节点向新节点传送数据,原有结点之间并无数据传输,所以就在网上搜索,但是没看到相关的解释,最终在这篇文章redis实战第九篇 集群扩容自动迁移槽(redis-cli)中的一句话上找到了答案,在此记录一下

  • 首先我们知道,redis集群中会将16384个slot平均分配到各个节点上,比如我一开始有三个节点,则此时节点上的slot分布有0-5461、5462-10924、10925-16383;如果此时我们增加一个节点,则会造成slot重新分配,但是是重新划定区间然后将所有slot重新填入相应的节点吗?并不是的,因为我们定位slot是根据key算出来的hash值对16384取余,而不用管节点的下标,如果节点之间再进行数据迁移,开销会非常大,流程也会变得很复杂,而且很容易产生错误,所以redis采用了“将每个节点的一部分slot迁移到新节点上”的方法,流程如下:
    • 先算出需要迁移的slot总数,在上面的例子中,最终一共有4个结点,所以需要分配16384/4 = 4096个结点给他
    • 得出总数之后,将该总数的slot迁移任务均分到各个节点,也就是每个节点分到4096/3 = 1365个迁移任务
    • 然后每个节点开始迁移,有第一个节点迁移0-1365、第二个节点迁移5463-7007、第三个节点迁移10925-12290到第四个节点
    • 至此,迁移完成
  • 下面是图示

以上
希望对后来者有所帮助

标签:slot,结点,redis,集群,迁移,节点
From: https://www.cnblogs.com/lavender-pansy/p/16607581.html

相关文章

  • Redis 主从复制
    概述主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器,前者称为主节点,后者称为从节点一个主节点可以有零个或多个从节点,但每个从节点只能有一个主节点......
  • Redis 为什么这么快
    Redis为什么这么快?很多人只知道是K/VNoSQl内存数据库,单线程……这都是没有全面理解Redis导致无法继续深问下去。这个问题是基础摸底,我们可以从Redis不同数据类型......
  • redis-list命令
    一、BLPOPkey[key...]timeoutBLPOP是阻塞式列表的弹出原语。它是命令LPOP的阻塞版本,这是因为当给定列表内没有任何元素可供弹出的时候,连接将被BLPOP命令阻塞。......
  • Redis 安装与配置
    一、安装Redis1.1、Windows安装RedisRedis最新版不支持Windows系统,建议在Linux上安装。如果硬要在Windows上使用Redis,可以在WSL中安装,或者安装Redis的早......
  • redis过期key的管理
    why:redis中的数据可以有一个过期时间,比如验证码、token等。当数据过期限后,是应该要被删除。redis一般采用:惰性删除+定期删除 的策略 what:定时删除:......
  • SpringBoot整合Redis实现常用功能
    SpringBoot整合Redis实现常用功能建议大小伙们,在写业务的时候,提前画好流程图,思路会清晰很多。文末有解决缓存穿透和击穿的通用工具类。1登陆功能我想,登陆功能......
  • redis(1)的几种数据模型
    1.string结构:动态字符串。1.1字符串1.2数值计数器1.3bitmap偏移量0101运动权重计算2.list结构:压缩列表、双向循环链表......
  • redis(2)
    redis的简单抽象模型:文件事件处理器===>保证redis单线程多个socket------->>>servicesocket请求--->>------->>>io多路复用程序......
  • Redis快速入门
    Redis快速入门本文只对Redis的常见命令和客户端使用做介绍1.初识RedisRedis是一种键值型的NoSql数据库,这里有两个关键字:键值型NoSql其中键值型,是指Redis中存储......
  • 基于StatefulSet控制器运行Redis Cluster
    redis集群规划  redis0——>master  redis1——>master  redis2——>master  redis3——>slave  redis4——>slave  redis5——>slave 构建镜像  ......