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

her*_*ere 2 lua redis redis-cluster

环境:Redis 集群

你好。我的要求是:

查找value-B 想到key-A (过程是使用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;
Run Code Online (Sandbox Code Playgroud)

我的redis命令:

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

错误消息:(错误)ERR 运行脚本时出错(调用 f_9bd20ba85f7bcc8ee1f6b55c4158bfa93eba2221):@user_script:2:@user_script:2:Lua 脚本尝试访问集群节点中的非本地密钥

小智 5

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

在你的情况下,keyA和valueA(即keyB)被散列到不同的槽和不同的节点,所以lua将不起作用。

解决此问题的一种方法是将以下内容作为键和值。

如果您有一个“key1”,并且其值为“value1”,则不应将其值/key2 保留为“value1”,而应将其保留为“{key1}:value1”。Redis 将确保“key1”和“{key1}:value1”都散列到单个节点,并且您将能够使用 lua 查询它们。