首页 > 数据库 >《Redis 设计与实现》的总结

《Redis 设计与实现》的总结

时间:2023-07-30 15:12:41浏览次数:44  
标签:总结 Redis CLUSTER 集群 16384 key 设计 slots 节点

17.集群

cluster-enabled # 是否开启集群模式的选项
CLUSTER MEET <ip> <port> # 告诉当前节点将ip:port节点加入到集群中

三个数据结构:

  • clusterNode:clusterNode 结构保存了一个节点的当前状态,比如节点的创建时间、节点的名字、节点当前的配置纪元、节点的IP地址和端口号等等。
  • clusterLink:clusterNode结构的link属性是一个clusterLink结构,该结构保存了连接节点所需的有关信息,比如套接字描述符,输人缓冲区和输出缓冲区。
    redisClient结构中的套接字和缓冲区是用于连接客户端的,而clusterLink结构中的套接字和缓冲区则是用于连接节点的。
  • clusterState:记录了在当前节点的视角下,集群目前所处的状态,例如集群是在线还是下线,集群包含多少个节点,集群当前的配置纪元,诸如此类:

三次握手:CLUSTER MEET <ip> <port>进行三次握手的过程如下,PONG和PING相当于两个“确认收到”的信息:

整个数据库被分为16384(2048*8)槽

只有这16384槽都有节点在处理时,集群才处于上线状态。

将槽0至槽5000指派给节点:

CLUSTER ADDSLOTS 0 1 2 3 4 ... 5000

:

每个节点都会将自己负责的槽发送给其他节点,所以集群中的每个节点都会知道数据库中的16384个槽分别被指派给了集群中的哪些节点。

  • clusterNode结构的slots属性和numslot属性记录了节点负责处理哪些槽。这样就可以通过少量的代价就可以告诉其他节点,当前节点负责哪些槽。
  • clusterstate结构中的slots数组记录了集群中所有16384个槽都由哪个节点进行处理。用于快速得知某个槽是要由哪个节点负责的。

CLUSTER KEYSLOT <key>命令可以查看一个给定键属于哪个槽,计算算法为CRC16(key) & 16383

如果当前节点不负责客户发送过来的key,就会告诉客户处理该key的节点的ip和端口。

clusterState结构中的slots_to_keys为跳跃表,用来保存槽和键之间的关系:

slots_to_keys 跳跃表每个节点的分值(score)都是一个槽号,而每个节点的成员( member)都是一个数据库键。由于使用槽号进行排序,所以相同槽号的key都是紧挨在一起的,故通过slots_to_keys可以快速找到某个槽对应的所有key。
【注】在跳表中,每个member都对应一个score,而这个score将用来在跳表中进行排序。

标签:总结,Redis,CLUSTER,集群,16384,key,设计,slots,节点
From: https://www.cnblogs.com/codingbigdog/p/17591460.html

相关文章

  • 7.30第四周总结
    实现一个聊天服务器来支持网页聊天。我先做好了聊天服务器,用Java中的线程,io,socket,serverSocket就可以实现,而且还可以上传文件,上传文件做了优化,采用多线程,这样就不会影响聊天。从协议,到用户对象设计,数据库设计,客户端的设计用到MVC模式。花了一天半的时间将程序初步写出来,又花了三天......
  • 代码随想录算法训练营第三天|力扣203.移除链表元素、力扣707.设计链表、力扣206.反转
    链表定义:通过指针串联在一起的线性结构,每一个节点由两个部分组成:数据域和指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null,即为空指针。链表类型1.单链表2.双链表3.循环链表,即链表首尾相连,可以解决约瑟夫环问题链表的存储方式数组在内存中是连续分布的,......
  • 模具设计软件 Vero VISI 2023 22新版详细下载 软件推荐
    VeroVISI是一款CAD制作软件,是一款十分专业和优秀好用的流程图绘制软件。可以帮助用户进行模具设计,可以轻松直观地创建流程图、网络图、组织结构图、工程设计以及其他图形,并且拥有极高的自由度和设计辅助功能,提供基于行业特定自动化的完整模具工具设计,方便好用。kkx给大家分享的Ver......
  • 设计模式-迭代器模式在Java中使用示例
    场景为开发一套销售管理系统,在对该系统进行分析和设计时,发现经常需要对系统中的商品数据、客户数据等进行遍历,为了复用这些遍历代码,开发人员设计了一个抽象的数据集合类AbstractObjectList,而将存储商品和客户等数据的类作为其子类AbstractObjectList类的子类ProductList和Custo......
  • 暑假总结3
    Hadoop分布式文件系统(HadoopDistributedFileSystem,简称HDFS)是Hadoop的核心模块之一,它主要解决Hadoop的大数据存储问题,其思想来源与Google的文件系统GFS。HDFS的主要特点:保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存3份。运行在廉价的机器上。适合大数据的处......
  • 【设计原则】图解何为依赖倒置
    依赖倒置原则(DependenceInversionPrinciple,DIP)是指设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖其抽象。要理解何为倒置,那就先得明确什么是“正向”,可以看到下图代码是自上而下地调用,即高层模块依赖底层模块,这就是正向依赖。:而依赖倒置则是使用抽象接口来降低耦......
  • GoRedisLock:Golang保障数据一致性的分布式锁解决方案
    在现代分布式系统中,多个节点之间共享资源是常见的需求。然而,并发访问共享资源可能导致数据不一致性和竞争条件。为了解决这些问题,我们需要引入分布式锁。GoRedisLock是一个出色的分布式锁库,它结合了Go语言和Redis的优势,提供了稳定高效的分布式并发控制解决方案。**项目地址:**htt......
  • 系统可扩展性的设计与实现
    总体思路系统可扩展性是指能够低成本、高质量地在现有系统中添加新功能和优化现有功能。可扩展设计的核心原则是:开闭原则。对新增开放,对修改关闭。也就是说,后续有新的需求,只需要新增组件,而不需要修改现有组件或逻辑(除非实现有BUG)。要保证一个大的业务模块的可扩展性,有效的策略......
  • 第三周总结
    本周在学习Python与大数据相关的内容中,我经历了一段充实而有收获的时间。以下是我本周的总结。首先,我开始了深入学习Python编程语言,这是一种简洁且功能强大的语言,广泛应用于数据处理和大数据分析。我复习了Python的基础知识,包括数据类型、变量、条件语句和循环结构等。此外,我还进......
  • Java面试题 P16:Redis篇:Redis使用场景-缓存-缓存穿透
    缓存涉及问题:1、缓存三兄弟:穿透击穿雪崩2、双写一致3、持久化4、数据过期策略5、数据淘汰策略如果发生了缓存穿透,击穿,雪崩,该如何解决?1、缓存穿透什么是缓存穿透,当查询一个不存在的数据,查redis中没有,mysql查询也没有,数据也不会直接写入到redis,就导致每次都要请求数据库,......