redis集群执行lua

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xixingzhe2/article/details/86167859

1、问题

单机模式下,执行lua脚本没有问题。放到集群执行后,报错

ERR Error running script (call to f_4a610f5543b3c3450220da7bd47825d3b6bffae8): @user_script:1: @user_script: 1: Lua script attempted to access a non local key in a cluster node

2、解决

因为Redis要求单个Lua脚本操作的key必须在同一个节点上,但是Cluster会将数据自动分布到不同的节点(虚拟的16384个slot,具体看官方文档)。

Redis cluster对多key操作有限制,要求命令中所有的key都属于一个slot,才可以被执行。

> CLUSTER KEYSLOT somekey
11058
> CLUSTER KEYSLOT foo{hash_tag}
(integer) 2515
> CLUSTER KEYSLOT bar{hash_tag}
(integer) 2515

keySlot算法中,如果key包含{},就会使用第一个{}内部的字符串作为hash key,这样就可以保证拥有同样{}内部字符串的key就会拥有相同slot。

官方地址:https://redis.io/commands/cluster-keyslot

 

展开阅读全文

没有更多推荐了,返回首页