我正在尝试使用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)
答案 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没有真正需要管道。