集群中命令的执行过程

举报
周杰伦本人 发表于 2022/06/26 14:02:33 2022/06/26
【摘要】 redis集群中命令的执行过程 包含数据库密钥的插槽的计算 节点与插槽的关联存储 键与插槽的关联存储 总结 ❤️ 感谢大家 redis集群中命令的执行过程如果客户端向群集中的节点发送关键命令,则只需将具有密钥的槽位分配给当前节点即可进行处理,如果不在当前节点上,则向客户端返回MOVED命令。 此命令将客户端重定向到正确的节点,然后再次发送命令。 在集群模式下,MOVED命令将隐藏 包含数据...

redis集群中命令的执行过程

如果客户端向群集中的节点发送关键命令,则只需将具有密钥的槽位分配给当前节点即可进行处理,如果不在当前节点上,则向客户端返回MOVED命令。 此命令将客户端重定向到正确的节点,然后再次发送命令。 在集群模式下,MOVED命令将隐藏

包含数据库密钥的插槽的计算

CRC 16 (密钥) % 16384计算密钥密钥所属的插槽。 其中,CRC16 ) key语句用于计算密钥key的CRC16校验和。 群集密钥槽密钥可以查看将此密钥分配给哪个插槽

节点与插槽的关联存储

节点如何确定这个插槽是否是自己负责的?显然是通过集群状态结构体的slots数组,如果该槽位所指示的集群节点是集群状态的myself属性值,则由该节点负责,否则基于所指示的集群节点

键与插槽的关联存储

集群中数据库键值对的保存只能使用0号数据库。 除了将键值对保存在数据库中外,节点还通过clusterState中的slots_to_keys跳转表来保存键与插槽之间的直接关系。 每个节点的score是插槽号,成员是数据库的键。 每当节点向数据库添加键值对时,都会从跳转表中添加密钥与槽位的关联,而删除键值对时,也会从跳转表中删除密钥与槽位的关联。 此跳转表中的记录允许批量操作插槽中的所有数据库键。

总结

这就是集群中命令的执行过程,客户端发送命令,如果有关槽位的命令在当前节点就执行,不在当前节点就返回move命令,然后重定向到负责这个槽位的节点,计算数据库key的槽位是根据key的crc16的值与16384取模,16384是redis所有的槽位,集群的slots数组的元素执行当前节点说明槽位是由这个节点负责的。

❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:

  1. 欢迎关注我❤️,点赞👍🏻,评论🤤,转发🙏
  2. 关注盼盼小课堂,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。
  3. 有不当之处欢迎批评指正。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。