首页 > 数据库 >这样讲Redis Cluster的工作原理,或许你真的能听懂~

这样讲Redis Cluster的工作原理,或许你真的能听懂~

时间:2022-10-30 10:38:15浏览次数:53  
标签:听懂 Redis Cluster 集群 16384 key gossip 节点


什么是Redis集群?

Redis从3.0开始就支持集群,节点之间使用gossip协议进行通信,实现了去中心化,集群中支持动态的添加和删除节点,动态迁移数据以及自动执行故障转移。

这样讲Redis Cluster的工作原理,或许你真的能听懂~_Cluster

什么是数据Sharding?

Redis Cluster 使用数据分片实现key的存储分布。

Redis Cluster将集群划分为16384个槽位,数据库中所有的key进行hash计算后,都会落到这16384个槽位中的其中一个槽位。

那么key 是如何定位到哪个槽位的,可以通过公式进行计算:CRC16(key)%16384,得到的值就是槽位;16384个槽位全部分配给cluster中的节点,每个节点维护自己的槽位,同时每个节点也会存储其他节点维护的槽位信息。

当然你也可以指定到哪个槽位,这就涉及到了hash tag。

什么是hash tag

hash tag 是用来解决用户想要将一堆数据key全部放到一个槽位而提出来的,用户可以将key设置成这样:原始的key+{tag标签},当redis cluster碰到这样的key,就会提取{}里面值,进行槽位计算。

集群中删除或新增节点,数据如何迁移?

假设cluster 目前有 四个节点 A,B,C,D

如何删除D节点,则会将D节点中的所有槽位全部分配给ABC节点;

如果新增E节点,则会将ABC中的部分槽点移到D节点;

主要是在节点变化之后,每个节点所维护的槽位变化,然后将槽位挪到对应节点就好。

Redis集群如何使用gossip通信?

定义

gossip使得元数据分布存储,不做集中存放,实现了去中心化,当一个节点信息变更,就会触发集群中整个节点信息的更新,缺点就是更新会有延迟。

meet消息

用于在集群中通知新节点加入

ping消息

用于检测节点是否在线及交换每个节点之间的状态信息

pong消息

pong消息是用来回应其他节点向自己发的消息,还可以通过发此消息,让其他节点更新此节点的状态信息

fail消息(不是用gossip协议实现)

当集群里的主节点A将主节点B标记为下线时,会通过集群广播一条关于主节点B的FAIL消息,所有接收到这条消息的节点(包括主从节点)都会将主节点B标记为下线

这样讲Redis Cluster的工作原理,或许你真的能听懂~_数据库_02

数据访问如何定位到具体的节点?

正常访问

这样讲Redis Cluster的工作原理,或许你真的能听懂~_Cluster_03

访问已被迁移至其他节点的数据

这样讲Redis Cluster的工作原理,或许你真的能听懂~_redis_04


标签:听懂,Redis,Cluster,集群,16384,key,gossip,节点
From: https://blog.51cto.com/u_9825187/5807328

相关文章

  • 这样讲Redis哨兵机制Sentinel的工作原理,或许你真的能听懂~
    什么是哨兵机制?Sentinel是Redis官方提出的一个高可用解决方案。它由一个或多个sentinel实例构成sentinel系统。为什么要用哨兵机制?我们都知道Redis具备主从复制的功能,......
  • windows下安装redis服务
    下载地址:Releases·microsoftarchive/redis·GitHubRedis支持32位和64位。这个需要根据你系统平台的实际情况选择,这里我们下载Redis-x64-xxx.zip压缩包到D盘......
  • 【Redis高手修炼之路】③持久化
    持久化​​1.RDB​​​​1.1自动备份​​​​1.2手动备份​​​​1.3与RDB相关的配置​​​​2.AOF​​​​2.1开启AOF​​​​2.2共存?谁优先?​​​​2.3与AOF相关......
  • 记录一次redis分布式锁的坑
    redis分布式锁的实现方式是:lock(){sync(this){//无法获取自旋setnx(key,UUID)setex(60s)returnUUID}}unlock......
  • Redis无法在Arm平台启动的问题
    这是继前文在Arm平台部署遇到的另一个问题,拉取Arm平台下的各服务镜像后,启动时却发现redis无法启动,进行了诊断后发现错误提示如下:redis|1:M28Oct202204:02:33.981#......
  • 安装Redis并在springboot项目中使用redis
    一、下载redis1.1官网下载 1.2将其添加到服务上,并使其开机自启动 二、下载redis可视化工具(下不下都行) 三、将redis集成到我们的springboot项目中3.1首先是引......
  • redis批量删除key
    1、删除所有的key,可以使用redis自身的命令:flushdb删除当前数据库中的所有Keyflushall删除所有数据库中的key#会删除集群中所有节点的key2、使用linux中的xargs来删除所有......
  • 快速启动redis
    文档说明:只记录关键地方;试验环境:linuxdebian11redisversion:"3"services:redis-server:image:redis:7-alpineports:-"637......
  • NoSQL之Redis从入门使用到深入
    简介Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型的Key-Value存储,也是一个数据结构存储,可用作数据库、缓存和消息中间件,并提供多种语言......
  • 说说 Redis 事务
    更多技术文章,请关注我的个人博客www.immaxfang.com和小公众号Max的学习札记。Redis事务简介Redis只是提供了简单的事务功能。其本质是一组命令的集合,事务支持一次......