评论

收藏

[NoSQL] 113分布式电商项目 - Redis集群(插槽)

数据库 数据库 发布于:2021-07-08 10:13 | 阅读数:508 | 评论:0

  
插槽的分配
  通过cluster nodes命令可以查看当前集群的信息:
DSC0000.png
  该信息反映出了集群中的每个节点的id、身份、连接数、插槽数等。
  当我们执行set abc 123命令时,redis是如何将数据保存到集群中的呢?执行步骤:

  • 接收命令set abc 123
  • 通过key(abc)计算出插槽值,然后根据插槽值找到对应的节点。(abc的插槽值为:7638)
  • 重定向到该节点执行命令
    整个Redis提供了16384个插槽,也就是说集群中的每个节点分得的插槽数总和为16384。./redis-trib.rb 脚本实现了是将16384个插槽平均分配给了N个节点。
  注意:如果插槽数有部分是没有指定到节点的,那么这部分插槽所对应的key将不能使用。

插槽和key的关系
  计算key的插槽值:
key的有效部分使用CRC16算法计算出哈希值,再将哈希值对16384取余,得到插槽值。
  什么是有效部分?
1、如果key中包含了{符号,且在{符号后存在}符号,并且{和}之间至少有一个字符,则有效部分是指{和}之间的部分;
a)key={hello}_e3mall的有效部分是e3mall
  2、如果不满足上一条情况,整个key都是有效部分;
a)key=hello_e3mall的有效部分是全部

  
关注下面的标签,发现更多相似文章