【发布时间】:2012-09-14 21:01:30
【问题描述】:
是否可以使用管道在 redis 中计算多集操作 也就是说
(a union b union c) intersect (d union c) SUNION a b c 烧结 d c
【问题讨论】:
是否可以使用管道在 redis 中计算多集操作 也就是说
(a union b union c) intersect (d union c) SUNION a b c 烧结 d c
【问题讨论】:
不,因为在管道中,只有在发送了整个命令集后才能获得结果(请参阅documentation),因此您可能猜到了您需要分别获取示例中每个嵌套操作的结果。
然而,使用 redis 2.6 中内置的脚本功能和一些 lua 可以实现非常相似的功能,听起来这很适合您:
EVAL "return redis.call('sinter', redis.call('sunion', 'a', redis.call('sunion', 'b', 'c')), redis.call('sunion', 'd', 'c'))"
上面的代码是一个简化的代码,它未经测试,但它应该让您大致了解什么是可能的。有关文档here 的更多信息。
【讨论】:
不,但你可以使用转换(MULTI)
MULTI
SUNIONSTORE abc a b c
SUNIONSTORE cd c d
SINTERSTORE i abc cd
SMEMBERS i
DEL abc cd i
EXEC
p.s 但似乎你不需要使用 c 因为它的所有成员都会放在 i
【讨论】:
SINTERSTORE不能访问abc或cd内的cd同样的交易,因为之前的SUNIONSTORE还没有被处理。