redis集群数据分片原理——哈希槽

38 篇文章 0 订阅

哈希槽

redis集群用的是哈希槽,而不是简单哈希和一致性哈希。

一个哈希槽相当于一个redis实例里的一段可存一串key的地址段,好似是划了一个硬盘分区。他比db要小,比一个key要大。

当水平扩容或是挂掉部分实力时,伴随槽位的迁移。

槽位的转移,即为槽位ID不变,而是槽位地址变了。集群只需要记住槽位ID和槽位地址映射就可以了。crc计算一个key的结果是一个恒定的槽位ID,即使是槽位发生了迁移,集群根据槽位ID还是可以找到槽位新地址的。

 

PS 一个redis实例的组成

redis中默认有编号0-15总共16个db,默认使用db0,每个数据库都有属于自己的空间。

在redis集群时,不可以使用select命令选择db,因为redis集群仅支持db0。

redis一个实例能存多少个key? 官方说单例能处理key:2.5亿个。

一个key或是value大小最大是512M。

 

简单哈希

(摘自:https://www.jianshu.com/p/6ad87a1f070e 仅作个人备份,浏览请看原文)

假设有三台机,数据落在哪台机的算法为:

c = Hash(key) % 3

例如 key A 的哈希值为4,4 % 3 = 1,则落在第二台机。Key ABC 哈希值为11,11 % 3 = 2,则落在第三台机上。

利用这样的算法,假设现在数据量太大了,需要增加一台机器。A 原本落在第二台上,现在根据算法4 % 4 = 0,落到了第一台机器上了,但是第一台机器上根本没有 A 的值。这样的算法会导致增加机器或减少机器的时候,引起大量的缓存穿透,造成雪崩。

 

一致性哈希

一致性哈希算法对于容错性和扩展性有非常好的支持。但一致性哈希算法也有一个严重的问题,就是数据倾斜。

更多移步大佬的文章:https://www.jianshu.com/p/6ad87a1f070e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值