Redis集群的工作原理

Redis可以有主从复制,还可以备份数据。还有哨兵节点负责监控管理。

在这里插入图片描述
虽然有主从复制和哨兵,但只能解决高可用的问题,解决不了数据量大的问题。因为咱们看起来人手多,但都是存储的全量数据。

在这里插入图片描述
所以对于数据容量提升,并没有什么帮助,例如多个redis拼起来,每一个负责一部分数据,合体进化成一个大的缓存服务器,变成一个集群。

建立集群还需要考虑到扩容,扩容时的加入类似三次握手。需要告诉集群中的某个redis自己的IP和端口,那么该redis就给其发送一个MEET信息发起握手,对方需要回复一个PONG信息同意入伙,最后该redis再回他一个PING信息,三次握手就完成了。

在这里插入图片描述
然后,该redis再将这个事告诉集群中其他redis,那么新的伙伴就算正式成为集群的一份子了。

第二件很重要的事情就是要解决数据存储的公平问题,解决方案类似哈希表的方法。

总共划分了16384的哈希桶,将它叫做槽位Slot,程序员可以按照能力大小,给它们各自分配一部分槽位。

在这里插入图片描述
数据读写的时候,对键值做一下哈希计算,映射到哪个槽就由谁负责。为了让大家的信息达成一致,启动的时候,每个人都得把自己负责的槽位信息告诉其他伙伴,一共有1万多个槽要通知其他小伙伴。这样需要传输的内容还挺大的,因此为了压缩数据空间,每个槽位干脆就用一个bit来表示。

自己负责这一位就是1,否则就是0,总共也才16384个bit,也就是2048个字节。传输起来轻便快捷,一口气就发送过去了。这样传输是轻量,但是真正工作的时候还是不方便。

遇到读写的时候,总不能去看谁的那位是1吧。

在这里插入图片描述
考虑用空间换时间,准备了一个超大的数组来存储每个槽由哪个节点来负责,通过上面的方式拿到信息后就更新到这里来。

这样一来,遇到数据访问的时候,我们就能快速知道这个数据是由谁来负责了。

在这里插入图片描述
这16384的槽位必须都得有人来负责,这样整个集群才算是正常工作,处于上线状态,否则就是下线状态。

数据分配问题解决了,正式上线后和原来不同的是得先检查数据是不是由自己负责,如果是由自己负责,那就进行处理。不然的话,就要返回一个MOVED错误给请求端。同时把槽号、IP和端口告诉他,让他知道该去找谁处理。

在这里插入图片描述
集群中每个redis都得有一个backup,这样就有了从节点。这样一旦遇到故障就能快速顶上。

在这里插入图片描述
有了集群和主从复制,就能保证高可用的同时,提升了数据容量。

参考资料趣话Redis:Redis集群是如何工作的?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值