集合对象的编码可以是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]