redis集群执行lua
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
还没有评论,来说两句吧...