Redis集群上的Lua脚本
我有一个Redis集群,我想在目标节点上执行LUA脚本。 当我这样做的时候,我从Redis集群收到一个错误,说键必须在同一个插槽中,但是脚本只在一个键上执行两个命令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 我尝试使用哈希标记键,但不起作用 出现此错误
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