redis集群实现数据的和槽位的分配

有没有人思考过redis是如何把数据分配到集群中的每个节点的,可能有人会说,把集群中的每个节点编号,先放第一个节点,放满了就放第二个节点,以此类推。。若是真的是这样的话,服务器的利用率和性能就过低了,由于先放第一个,其余的服务器节点就闲置下来了,单个节点的压力就会很是的大,其实就至关于退化成为了单机服务器,从而违背了集群发挥每个节点的性能的初衷。

在redis官方给出的集群方案中,数据的分配是按照槽位来进行分配的,每个数据的键被哈希函数映射到一个槽位,redis-3.0.0规定一共有16384个槽位,固然这个能够根据用户的喜爱进行配置。当用户put或者是get一个数据的时候,首先会查找这个数据对应的槽位是多少,而后查找对应的节点,而后才把数据放入这个节点。这样就作到了把数据均匀的分配到集群中的每个节点上,从而作到了每个节点的负载均衡,充分发挥了集群的威力。数据库

在redis中,把一个key-value键值对放入的最简单的方式就是set key value,以下所示:

127.0.0.1:7000> set key value
-> Redirected to slot [12539] located at 192.168.39.153:7002
OK
192.168.39.153:7002> get key
"value"
192.168.39.153:7002>

能够看出,当咱们把key的值设置成为value的时候,客户端被重定向到了另外一个节点192.168.39.153:7002,这是由于key对应的槽位是12359,因此咱们的key-value就被放到了槽12359对应的节点,192.168.39.153:7002了。接下来,咱们来看看redis是怎么把一个key-value键值对映射成槽,而后又如何存放进集群中的。负载均衡

计算key字符串对应的映射值,redis采用了crc16函数而后与0x3FFF取低16位的方法。crc16以及md5都是比较经常使用的根据key均匀的分配的函数,就这样,用户传入的一个key咱们就映射到一个槽上,而后通过gossip协议,周期性的和集群中的其余节点交换信息,最终整个集群都会知道key在哪个槽上。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杵意

谢谢金主打赏呀!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值