我有一个 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
我尝试使用哈希标签密钥,但它不起作用。
您收到此错误是因为您尝试访问名为
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
命令,这应该就可以工作。
@davidcerbo 您能分享一下您使用 lua 创建的 redis-cluster 客户端吗?