Redis-怎么让相关键都分配到集群中的同一个节点

为什么有时候要让相关键都分配到同一个节点?

因为如果命令涉及到多个键,那么只有这些键都位于同一个节点里,Redis才能正常支持该命令。

Redis是按照什么路由规则,分配键到节点的?

因为Redis集群内置插槽为16384个,所以Redis会将每个键的键名的有效部分使用CRC16算法计算出散列值,然后对16384的取余。余数为多少就表示该键应该被分配到哪个节点,这样的话,每个键都可以被分配到16384个插槽中,而集群中的每个节点都会被分配一定的插槽。

关键就在每个键的键名的有效部分,因为Redis是根据每个键的键名的有效部分使用CRC16算法计算出的散列值来分配键的,那么如果想要让相关键都分配到集群中的同一个节点里,只需要让相关键的键名的有效部分相同即可。

那么键名的有效部分指的是什么?

  • 如果键名包含{符号,且在{符号后面存在}符号,并且{和}之间有至少一个字符,则有效部分是指{和}之间的内容。

  • 如果不满足前一条规则,那么整个键名都为有效部分。

比如键user.name的有效部分就是“user.name”,键{user}.name的有效部分就是”user”。

需求:让id为101的用户的username和age属性分配到同一个节点,方便之后批量取出。

操作示例:Redis-怎么让相关键都分配到集群中的同一个节点_第1张图片
可以发现设值操作时,username和age都被分配到了6382端口节点实例,属于同一个节点,所以之后可以支持mget命令一次操作两个键。

你可能感兴趣的:(#,Redis)