Redis对象(四) Set

定义

Set 是一个不重复、无序的字符串集合。这里额外说明一下,INTSET 编码的时候,其实是有序的,不过不应该依赖这个,整体还是看成无序来用比较好。

使用场景

过滤器、社交网络关系等。

常用操作

写操作

  • SADD key member [member …] 添加元素,返回值为成功添加了几个元素。

  • SREM key member [member …] 删除元素,返回值为成功删除了几个元素。

读操作

  • SISMEMBER key member 查询元素是否存在。

  • SCARD key 查询集合元素个数。

  • SMEMBERS key 查看集合的所有元素。

  • SSCAN key cursor [MATCH pattern] [COUNT count] 查看集合元素,可以理解为指定游标查询,默认个数为 10。

  • SINTER key [key …] 返回在第一个集合里,同时在后面所有集合都存在的元素。

  • SUNION key [key …] 返回所有集合的并集,集合个数大于等于 2。

  • SDIFF key [key …] 返回第一个集合有,且在后续集合中不存在的元素,集合个数大于等于 2。

底层实现

两种编码方式,如果集合元素都是整数,且整数数量不超过 512 个,使用 INTSET 编码,但查询时需要二分查找。

如果不满足 INTSET 的条件,就用 HASHTABLE。

常见问题

  • Set 是有序的吗?
  • 如何查看 Set 所有成员?
  • 如何查看 Set 中成员个数?
  • 如何求两个 Set 的并集或交集?
  • Set 编码方式是什么?
  • Set 为什么要用两种编码方式?
观察性能指标“平均负载”
Redis对象(三) 底层数据结构压缩列表