Lua脚本尝试在集群节点中访问非本地密钥

env: Redis集群

您好。 我的需求是:

通过key-A查找value-B(该过程使用key-A查找value-A,value-A == key-B,使用key-B查找value-B)

我的lua如下:

[root@ml-208 redis]# cat x-userid-tag.lua

local f3=redis.call('HGET',KEYS[1],'1'); local f4=redis.call('HGET',f3,'1') ; return f4;

我的redis cmd:

./bin/redis-cli -c -h 192.168.33.203 -p 6000 --eval ./x-userid-tag.lua 0C559F3FEF368A8B53DE69C267423F0E

错误消息: (error) ERR Error running script (call to f_9bd20ba85f7bcc8ee1f6b55c4158bfa93eba2221): @user_script:2: @user_script: 2: Lua脚本尝试在集群节点中访问非本地密钥

点赞
用户7065324
用户7065324

Lua脚本只在一个Redis实例上运行,它的内部查询不会被集群重定向,因此,如果另一个集群中存在两个键,则无法查询这两个键。

在您的情况下,keyA和valueA(即keyB)被哈希到不同的插槽和不同的节点,因此lua将无法工作。

解决方法之一是将以下内容作为键和值。

如果您有一个'key1',并且它的值为'value1',而不是将其值/ key2保持为'value1',您应该将其保持为'{key1}:value1'。 Redis将确保将'key1'和'{key1}:value1'都哈希到一个节点,并且您将能够使用lua查询它们两个。

2018-04-03 09:00:30