Python 如何从排序集中删除属于不同未排序集的所有值

Python 如何从排序集中删除属于不同未排序集的所有值,python,lua,redis,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_scrip

我正在尝试使用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)

local
是保留的,用于声明局部变量。在Redis的Lua脚本引擎中,所有变量都必须是本地变量,以防止沙箱垃圾失控(请阅读

您的脚本只是缺少一个变量名-以下操作可能会更好:

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)

而且,在我看来,这里没有真正需要管道。

我在你的代码中没有看到任何集合,但是你可以减去集合,即
{1,2,3,4,5}-{3,4,5,6,7}
将给你
{1,2}
你能更清楚地解释一下这个问题吗?到底出了什么问题?这里的python包装是否与问题相关?
local
是Lua中的一个关键字(而且还缺少一个逗号)。也许这就是问题所在……是的,我知道本地是保留关键字,但在发布问题时我弄错了,请现在检查,也许你的Redis太旧了。声明您只能在Redis 2.4及更新版本上传递多个参数。是的,我知道local是reserve关键字,在发布问题时我犯了错误,请立即检查