在 Redis 集群上执行 Lua 脚本

我有一个 Redis 集群,我想在目标节点上执行一个 LUA 脚本。 当我这样做时,我从 Redis 集群接收到一个错误,说键必须在相同的 SLOT 上,但脚本只对一个键执行两个命令。

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

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

点赞
用户10469390
用户10469390

你之所以会收到这个错误信息是因为你尝试访问一个名为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 命令中,这个方法应该就可以工作了。

2019-01-17 19:56:47