Redis哈希槽

概念

Redis哈希槽 Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis
先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383
之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。

问题

有1亿条数据需要缓存,请问如何设计存储这批数据?

利用哈希槽的做法

1.哈希槽其实就是一个数组,数组[0, 1, 2, …, 2^14-1]形成hash slot空间

2.把哈希槽均匀分段,分配给redis节点
redis节点1,负责存储5461个哈希槽的数据,编号0号至5460号哈希槽
redis节点2,负责存储5462个哈希槽的数据,编号5461号至10922号哈希槽
redis节点3,负责存储5461个哈希槽的数据,编号10923号至16383号哈希槽

3.计算每条数据的slot空间位置
将数据key进行哈希取值,映射已经固定大小的hash slot空间上

redis哈希槽分区的特点

1)解耦数据和节点之间的关系,方便节点数据迁移,例如:数据的读写只要计算出槽号就可以,节点的扩容和收缩只要重新均衡分配槽区间即可;故简化了节点扩容和收缩难度
2)节点自身维护槽的映射关系,不需要客户端(spring)或者代理服务维护槽分区和数据
3)支持节点、槽、键之间的映射查询,用于数据路由、在线伸缩等场景

槽位总数为什么是 16384?

1.当集群扩展到1000个节点时,也能确保每个master节点有足够的插槽,实际情况很难达到1000节点。
2.槽位过多会增加网络带宽消耗

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值