如何从有序集中删除所有值,这些值是不同未排序集的一部分

时间:2015-05-29 13:40:10

标签: python lua redis

我正在尝试使用lua脚本删除但我不知道出了什么问题

import redis
r = redis.Redis(host='localhost',port=6379)
pipe = r.pipeline(transaction = False)
lua = """
local env = redis.call('smembers', 'user_key')
redis.call('zrem','another_key', unpack(env))
"""
p = r.register_script(lua)
p(client=pipe)

1 个答案:

答案 0 :(得分:0)

local保留Lua keyword,用于声明局部变量。在Redis的Lua脚本引擎中,所有变量必须是本地的,以防止沙箱垃圾失控(阅读http://redis.io/commands/eval#global-variables-protection处的文档)

您的脚本只是缺少变量名称 - 以下应该可能更好:

import redis
r = redis.Redis(host='localhost',port=6379)
pipe = r.pipeline(transaction = False)
lua = """
local l = redis.call('smembers' 'user_key')
redis.call('zrem', unpack(l))
"""
p = r.register_script(lua)
p(client=pipe)

此外,IMO没有真正需要管道。