Redis集群模式下 Hashtag 问题

错误问题1:

redis.exceptions.ResponseError: CROSSSLOT Keys in request don't hash to the same slot

在集群中,key会被划分到不同的槽中。不同的节点会拥有散列槽的一个子集。

多个key的操作、事务或者lua脚本调用多个key是允许的,只要所有被调用的key都在一个节点的hash槽中就可以。

redis集群实现了所有非分布式版本的单key命令。复杂命令的执行像set类型联合或者插入也是可以实现的,只要保证所有的key都属于单个节点。

你可以使用Hash Tags强制所有的key属于一个节点

Redis 集群中额Slot概念

在 Redis Cluster 中有一个概念 slot(槽位),我们翻译为槽。slot(槽位)数量是固定的,为 16384 个。这些 slot(槽)会均匀地分布到各个节点上。另外 Redis 的键和值会根据 hash 算法存储在对应的 slot(槽位)中。简单讲,对于一个键值对,存的时候在哪里是通过 hash算法算出来的,那么取得时候也会算一下,知道值在哪个 slot 上。根据 slot 编号再到对应的节点上去取。

哈希槽计算公式 

集群使用公式slot=CRC16(key)/16384来计算key属于哪个槽,其中CRC16(key)语句用于计算key的CRC16 校验和。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值