集合对象的编码可以是intset或者hashtable
intset编码的集合对象使用整数集合作为底层实现,集合对象包含的所有元素都被保存在整数集合里面。
hashtable编码的集合对象使用字典作为底层实现,字典的每个键都是一个字符串对象,每个字符串对象包含了一个集合元素,而字典的值全部被设置为NULL。
8.5.1 编码的转换
当集合对象可以同时满足以下两个条件时,对象使用intset编码:
- 集合对象保存的所有元素都是整数值
- 集合对象保存的元素数量不超过512个
不能满足这两个条件的集合对象需要使用hashtable编码。
8.5.2 集合命令
1. SADD
SADD key member [member ...]
将一个或多个member元素加入到集合key当中,已经存在于集合的member元素将被忽略。
假如key不存在,则创建一个只包含member元素作成员的集合。
当key不是集合类型时,返回一个错误。
2. SCARD
SCARD key
返回集合key的基数(集合中元素的数量)。
3. SDIFF
SDIFF key [key ...]
返回一个集合的全部成员,该集合是所有给定集合之间的差集。
不存在的key被视为空集。
4. SDIFFSTORE
SDIFFSTORE destination key [key ...]
这个命令的作用和SDIFF类似,但它将结果保存到destination集合,而不是简单地返回结果集。
如果destination集合已经存在,则将其覆盖。
destination可以是key本身。
5. SINTER
SINTER key [key ...]
返回一个集合的全部成员,该集合是所有给定集合的交集。
不存在的key被视为空集。
当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。
6. SINTERSTORE
SINTERSTORE destination key [key ...]
这个命令类似于SINTER命令,但它将结果保存到destination集合,而不是简单地返回结果集。
如果destination集合已经存在,则将其覆盖。
destination可以是key本身。
7. SISMEMBER
SISMEMBER key member
判断member元素是否集合key的成员。
8. SMEMBERS
SMEMBERS key
返回集合key中的所有成员。
不存在的key被视为空集合。
9. SMOVE
SMOVE source destination member
将member元素从source集合移动到destination集合。
SMOVE是原子性操作。
如果source集合不存在或不包含指定的member元素,则SMOVE命令不执行任何操作,仅返回0。否则,member元素从source集合中被移除,并添加到destination集合中去。
当destination集合已经包含member元素时,SMOVE命令只是简单地将source集合中的member元素删除。
当source或destination不是集合类型时,返回一个错误。
10. SPOP
SPOP key
移除并返回集合中的一个随机元素。
如果只想获取一个随机元素,但不想该元素从集合中被移除的话,可以使用SRANDMEMBER命令。
11. SRANDMEMBER
SRANDMEMBER key [count]
如果命令执行时,只提供了key参数,那么返回集合中的一个随机元素。
12. SREM
SREM key member [member ...]
移除集合key中的一个或多个member元素,不存在的member元素会被忽略。
当key不是集合类型,返回一个错误。
13. SUNION
SUNION key [key ...]
返回一个集合的全部成员,该集合是所有给定集合的并集。
不存在的key被视为空集。
14. SUNIONSTORE
SUNONSTORE destination key [key ...]
这个命令类似于SUNION命令,但它将结果保存到destination集合,而不是简单地返回结果集。
如果destination已经存在,则将其覆盖。
destination可以是key本身。
15. SSCAN
SSCAN key cursor [MATCH pattern] [COUNT count]