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

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

  1. SINTER set [set ...]

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

  1. redis> SMEMBERS s1
  2. 1) "a"
  3. 2) "b"
  4. 3) "c"
  5. 4) "d"
  6.  
  7. redis> SMEMBERS s2
  8. 1) "c"
  9. 2) "d"
  10. 3) "e"
  11. 4) "f"

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

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

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

SINTERSTORE 命令

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

  1. SINTERSTORE destination_key set [set ...]

如果给定的键已经存在,那么 SINTERSTORE 命令在执行储存操作之前会先删除已有的键。SINTERSTORE 命令在执行完毕之后会返回被储存的交集元素数量作为返回值。

比如说,通过执行以下命令,我们可以把 s1s2 的交集计算结果储存到集合 s1-inter-s2 里面:

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

其他信息

属性
复杂度SINTER 命令和 SINTERSTORE 命令的复杂度都是 O(N*M),其中 N 为给定集合的数量,而 M 则是所有给定集合当中,包含元素最少的那个集合的大小。
版本要求SINTER 命令和 SINTERSTORE 命令从 Redis 1.0.0 版本开始可用。