Redis哈希槽

文章介绍了Redis集群中哈希槽的概念,通过16384个哈希槽将数据均匀分布到多个节点,实现数据与节点的解耦。在存储1亿条数据时,可以将哈希槽按比例分配给不同节点,每条数据根据key计算哈希槽位置存储。这种策略简化了节点扩展和数据迁移,并由节点自身维护映射关系,支持高效的数据路由。
摘要由CSDN通过智能技术生成

概念

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、付费专栏及课程。

余额充值