赞
踩
错误问题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 Cluster 中有一个概念 slot(槽位),我们翻译为槽。slot(槽位)数量是固定的,为 16384 个。这些 slot(槽)会均匀地分布到各个节点上。另外 Redis 的键和值会根据 hash 算法存储在对应的 slot(槽位)中。简单讲,对于一个键值对,存的时候在哪里是通过 hash算法算出来的,那么取得时候也会算一下,知道值在哪个 slot 上。根据 slot 编号再到对应的节点上去取。
集群使用公式slot=CRC16(key)/16384来计算key属于哪个槽,其中CRC16(key)语句用于计算key的CRC16 校验和。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。