Set集合,无序,一堆不重复值的组合。利用redis提供的set数据结构,可以存储一些集合性的数据。
使用场景:例如,实现如共同关注、共同喜好、二度好友等
1、SADD key member [member …]
向集合中添加一个或者多个成员
1.1、如果集合key 不存在,则新建集合key。并添加member元素到集合key中。myset不存在,执行下面命令后,就创建了myset并且成员是0和1
sadd myset 0 1
重复的成员不会被添加进去。sadd myset 0 1 0 1 也只会添加进一个0和一个1
1.2、如果已经在集合key中存在则忽略.
sadd myset 0
sadd myset 1
sadd myset 3
成员0和1已经存在,因此返回0。成员3不存在,因此返回1
1.3、如果key的类型不是集合则返回错误.
sadd myhash 1
2、SCARD key
返回集合存储的key的基数 (集合元素的数量).
key存在,返回集合的基数(元素的数量)。key不存在,则返回 0.
scard myset
scard myset1
3、SMEMBERS key
返回key集合所有的元素。不会删除元素。
smembers myset
4、SRANDMEMBER key [count]
随机返回key集合中的一个元素或者count个元素。不会删除元素
例如:myset有3个元素:0 1 3
-
如果count是整数且小于元素的个数,返回含有 count 个不同的元素的数组
-
如果count是个整数且大于集合中元素的个数时,仅返回整个集合的所有元素
-
当count是负数,则会返回一个包含count的绝对值的个数元素的数组
-
如果count的绝对值大于元素的个数,则返回的结果集里会出现一个元素出现多次的情况.
以上是key存在的情况,会随机返回一个或者count个成员。当key不存在时,返回null
5、SPOP key [count]
从存储在key的集合中移除并返回一个或多个随机元素。会删除元素。
此操作与SRANDMEMBER类似,它从一个集合中返回一个或多个随机元素,但不删除元素。
spop myset
smembers myset
可见随机返回了一个成员3,并且删除了3
6、SMOVE source destination member
将member从source集合移动到destination集合中. 对于其他的客户端,在特定的时间元素将会作为source或者destination集合的成员出现.
6.1 先创建两个集合
sadd set1 0 1 2
sadd set2 1 2 3
6.2 source 集合不存在或者不包含指定的元素
smove命令不执行任何操作并且返回0.
smove set3 set2 2
smove set1 set2 4
6.3 source 集合存在且包含指定的元素
此成员将会从source集合中移除,并添加到destination集合中去。
smove set1 set2 0
smembers set1
smembers set2
如果destination集合已经存在该元素,则smove命令仅将该元素从source集合中移除
6.4 若source 和destination不是集合类型
则返回错误
7、SINTER key [key …]
返回指定所有的集合的成员的交集。例如推荐共同好友,拿到两个用户的好友列表,有交集,那就可以把用户A的其他好友推荐给用户B。例如向Bob推荐杨幂,向Tom推荐杨颖,因为他们都有共同的好友张大大。
例如:
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SINTER key1 key2 key3 = {c}
sadd key1 a b c d
sadd key2 c
sadd key3 a c e
sinter key1 key2 key3
如果key不存在则被认为是一个空的集合。当给定的集合为空的时候,结果也为空.(一个集合为空,结果一直为空).
8、SUNION key [key …]
返回给定的多个集合的并集中的所有成员.
例如:
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SUNION key1 key2 key3 = {a,b,c,d,e}
SUNION key1 key2 key3
SUNION key1 key2 key4
不存在的key可以认为是空的集合.
9、SDIFF key [key …]
返回一个集合与给定集合的差集的元素.
举例:
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
返回key3与key1和key2的差集。
SDIFF key1 key2 key3 = {b,d}
注:是最后一个key跟前面几个key的比较
Sdiff key1 key2 key3
Sdiff key1 key2
sdiff key1 key3
sdiff key2 key3
不存在的key认为是空集.