Redis之分布式

前面介绍了一些Redis单点方面的知识,现在来介绍一下Redis分布式方面的知识点。

写本笔记是因为在看书学习的过程中联想起一个被面试问过的问题没答上来,太惭愧了。redis的分布式算是基础知识,必须掌握哦。那天没答上来的感觉就像上学时我们对基础知识点都不了解,只是靠别人说过就假装我们自己懂了,然后就玩现了,面试的分也低了。好了,下面开始做笔记。

1. 引子:面试中被问过的题目

假如说分布式下redis有多个实例,那么多个请求打过来,问:怎么做让请求均匀的打在这些实例上?

我的思路:一遇到这种多实例响应请求的问题我就想到是要做负载均衡,但是redis做负载均衡没怎么听说呢,咋做呢?

面试点:面试官要问的是redis在水平上的拆分问题,也就是说key是如何分布在所有实例上的。这个问题的答案就是做(1)hash算法,对key进行hash运算(2)范围映射。

(1)hash算法:是指你有多少个实例,那么就用key的hash值对这个实例数取模,取到一个数,因为每个redis实例都是有一个整数值id的,这个id一般都是从0到n,所以取模的结果和这个redis实例的id取匹配,就能知道这个key会落到哪个redis实例上了。

(2)范围映射:是指将key本身作为数据分布的条件,例如:当0<=key<100时,数据存放到实例1上;当100<=key<200时,数据存放到实例2上,以此类推。因为key的值域是由业务层决定的,业务层要清楚每个区间的范围和Redis实例数量,才能完整地描述数据分布。但是这样的话,key的值域和实例数量耦合,数据分布无法在纯系统层面实现,所以不推荐,而实际中也几乎没有这么干的。

2. 谈谈 主备复制

在redis实现高可用时,总是谈到主备模式或者读写分离(主负责写操作,从一般负责读,从服务器向从主务器请求同步数据,也就是复制),那你知道主备之间到底是如何实现复制的吗?

2.1 主备复制流程

1)首先slave向master发起SYNC命令。这一步在slave启动后触发,master被动地将新进slave节点加入自己的主备复制集群。

2)master收到SYNC命令后,开启BGSAVE操作。

3)BGSAVE完成后,master将快照信息发送给slave.

4)发送期间,master收到的来自用户客户端的新的命令,除了正常响应之外,都再存入一份到backlog队列。

5)快照信息发送完后,mater继续发送backlog队列信息。

6)backlog发送完成后,后续的写操纵同时发给slave,保持实时地异步复制。

2.2 多个slave发送SYNC命令

如果多个slave发送SYNC命令并发发送给master,企图建立主备关系,只要第二个slave的SYNC命令发生在master完成BGSAVE前,第二个slave将收到和第一个slave相同的快照和后续backlog;否则第二个slave的SYNC将触发master的第二次BGSAVE。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值