SINTER、SINTERSTORE:对集合执行交集计算

SINTER 命令可以计算出用户给定的所有集合的交集,然后返回这个交集包含的所有元素:

SINTER set [set ...]

比如对于以下这两个集合来说:

redis> SMEMBERS s1
1) "a"
2) "b"
3) "c"
4) "d"
redis> SMEMBERS s2
1) "c"
2) "d"
3) "e"
4) "f"

我们可以通过执行以下命令计算出这两个集合的交集:

redis> SINTER s1 s2
1) "c"
2) "d"

从结果可以看出,s1 和 s2 的交集包含了 "c" 和 "d" 这两个元素。

SINTERSTORE 命令

除了 SINTER 命令之外,Redis 还提供了 SINTERSTORE 命令,这个命令可以把给定集合的交集计算结果存储到指定的键里面:

SINTERSTORE destination_key set [set ...]

如果给定的键已经存在,那么 SINTERSTORE 命令在执行存储操作之前会先删除已有的键。

SINTERSTORE 命令在执行完毕之后会返回被存储的交集元素数量作为返回值。

例如,通过执行以下命令,我们可以把 s1 和 s2 的交集计算结果存储到集合 s1-inter-s2 中:

redis> SINTERSTORE s1-inter-s2 s1 s2
(integer) 2 -- 交集包含两个元素
redis> SMEMBERS s1-inter-s2
1) "c"
2) "d"

其它信息

  • 复杂度:SINTER 命令和 SINTERSTORE 命令的复杂度都是 O(N*M),其中 N 为给定集合的数量,而 M 则是所有给定集合当中,包含元素最少的那个集合的大小。

  • 版本要求:SINTER 命令和 SINTERSTORE 命令从 Redis 1.0.0 版本开始可用。