REDIS中的管道集操作

REDIS中的管道集操作,redis,set,pipe,multiset,Redis,Set,Pipe,Multiset,是否可以使用管道计算redis中的多集运算 i、 很难说 (a联管节b联管节c)相交(d联管节c) SUNION a b c SINTER d c否,因为在管道中,只有在发送整个命令集后才能获得结果(请参阅),因此,正如您可能猜到的那样,您需要分别获取示例中每个嵌套操作的结果 但是,使用redis 2.6中内置的脚本功能和一些lua可以实现非常类似的功能,这听起来似乎符合您的要求: EVAL "return redis.call('sinter', redis.call('sunion', 'a

是否可以使用管道计算redis中的多集运算 i、 很难说

(a联管节b联管节c)相交(d联管节c)
SUNION a b c SINTER d c

否,因为在管道中,只有在发送整个命令集后才能获得结果(请参阅),因此,正如您可能猜到的那样,您需要分别获取示例中每个嵌套操作的结果

但是,使用redis 2.6中内置的脚本功能和一些lua可以实现非常类似的功能,这听起来似乎符合您的要求:

EVAL "return redis.call('sinter', redis.call('sunion', 'a', redis.call('sunion', 'b', 'c')), redis.call('sunion', 'd', 'c'))"

上面的代码是一个简化的代码,未经测试,但它应该让您大致了解可能的情况。有关文档的更多信息。

否,但您可以使用trancastions(MULTI)


p、 s但您似乎不需要使用c,因为它的所有成员都将放置在i

中,谢谢Mahn,但是似乎只有redis 2.6支持此功能,而redis 2.6仍然没有提交为稳定版本release@raviop531你考虑接受这个答案了吗?就这么说吧,因为这个问题没有其他答案。这是行不通的,multi-exec块的前提是只有发出exec后才能运行所有操作,这意味着第三个
SINTERSTORE
无法在同一事务中访问
abc
cd
,因为之前的
SUNIONSTORE
尚未处理。
MULTI
SUNIONSTORE abc a b c
SUNIONSTORE cd c d
SINTERSTORE i abc cd 
SMEMBERS i
DEL abc cd i
EXEC