Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis集群上的Lua脚本_Redis_Lua_Cluster Computing_Redis Cluster - Fatal编程技术网

Redis集群上的Lua脚本

Redis集群上的Lua脚本,redis,lua,cluster-computing,redis-cluster,Redis,Lua,Cluster Computing,Redis Cluster,我有一个Redis集群,我想在目标节点上执行LUA脚本。 当我这样做的时候,我从Redis集群收到一个错误,说键必须在同一个插槽中,但是脚本只在一个键上执行两个命令 if redis.call('HEXISTS', 'TEST', KEYS[1]) == 1 then redis.call('HSET', 'TEST', KEYS[1], ARGV[1]) return 1 end return 0 我尝试使用哈希标记键,但不起作用 出现此错误

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

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
命令,这项功能就可以正常工作。

您之所以会出现此错误,是因为您试图访问名为
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
命令,这项功能就可以正常工作。

谢谢!解决方案就在我眼皮底下,但我看不到:)下面的脚本现在可以工作了:如果redis.call('HEXISTS',KEYS[1],ARGV[1])==1,那么redis.call('HSET',KEYS[1],ARGV[1],ARGV[2])返回1结束返回0谢谢!解决方案就在我眼皮底下,但我看不到:)下面的脚本现在可以工作了:如果redis.call('hexist',KEYS[1],ARGV[1])==1,那么redis.call('HSET',KEYS[1],ARGV[1],ARGV[2])返回1结束返回0