定义
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 为什么要用两种编码方式?