2

是否可以使用管道计算 redis 中的多集操作,即说

(a union b union c) intersect (d union c) SUNION abc SINTER dc

4

2 回答 2

3

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

然而,使用 redis 2.6 中内置的脚本功能和一些 lua 可以实现非常相似的东西,听起来这可能适合您的账单:

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

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

于 2012-09-23T00:09:49.050 回答
0

不,但您可以使用转换 (MULTI)

MULTI
SUNIONSTORE abc a b c
SUNIONSTORE cd c d
SINTERSTORE i abc cd 
SMEMBERS i
DEL abc cd i
EXEC

ps 但似乎你不需要使用c因为它的所有成员都会放在i中

于 2012-09-26T10:10:54.167 回答