Redis 集群上的 Lua 脚本

问题描述 投票:0回答:2

我有一个 Redis 集群,我想在目标节点上执行 LUA 脚本。 当我这样做时,我收到来自 Redis Cluster 的错误,指出密钥必须位于同一插槽上,但脚本仅在 1 个密钥上执行两个命令。

if redis.call('HEXISTS', 'TEST', KEYS[1]) == 1
    then 
        redis.call('HSET', 'TEST', KEYS[1], ARGV[1])
        return 1
    end
return 0

我尝试使用哈希标签密钥,但它不起作用。

redis lua cluster-computing redis-cluster
2个回答
3
投票

您收到此错误是因为您尝试访问名为

TEST
的 Redis 密钥,但不要通过在 EVAL 命令中列出它来让 Redis 或您的 Redis 客户端知道它。

Redis Lua 脚本采用两个参数列表,一个是通用目的 (

ARGV[]
),另一个是脚本将要访问的键的严格列表 (
KEYS[]
)。

您可能在

HEXISTS
调用中交换了键名称和字段名称,即您可能需要使用:

if redis.call('HEXISTS', KEYS[1], 'TEST') == 1
    then 
        redis.call('HSET', KEYS[1], 'TEST', ARGV[1])
        return 1
    end
return 0

只要将键名正确传递给

EVAL
命令,这应该就可以工作。


0
投票

@davidcerbo 您能分享一下您使用 lua 创建的 redis-cluster 客户端吗?

© www.soinside.com 2019 - 2024. All rights reserved.