10. Redis中的Set
大约 3 分钟
set类型
对比list集合是有序可以保持重复记录的列表,set集合是无序的,不可以存储重复的记录
集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。
命令 | 说明 |
---|---|
sadd | 添加一个或多个元素到集合中,如果集合中存在该元素则忽略 |
scard | 返回集合中的元素的个数 |
sismember | 判断集合中是否含有某元素 |
smembers | 获取集合中的所有的元素 |
srem | 删除集合中指定的元素 |
srandmember | 随机返回集合中的元素,版本2.6后在命令之后可以跟一个count。指定随机返回的元素个数 |
spop | 和srandmember类似,只是spop会将获取的元素移除而srandmember不会移除元素 |
smove | 将元素从一个集合移动到另一个集合中 |
sdiff | 返回两个集合的差集 |
sdiffstore | 和sdiff类似,不同的是会将差集结果保存起来 |
sinter | 获取两个集合的交集 |
sinterstore | 和sinter类似,不同的是将结果保存起来了 |
sunion | 获取两个集合的并集 |
sunionstore | 获取两个集合的并集并保存起来 |
SADD
添加一个或多个元素到集合中,如果集合中存在该元素则忽略
127.0.0.1:6379> sadd stu zhangsan lisi wangwu lisi zhangsan
(integer) 3
12
添加了5个元素,但只成功了3个,因为有两个是相同的。
SCard
返回set集合中元素的个数
127.0.0.1:6379> scard stu
(integer) 3
12
SIsMember
判断集合中是否含有某元素
127.0.0.1:6379> sismember stu zhangsan
(integer) 1 # 含有zhangsan
127.0.0.1:6379> sismember stu zhangsan1
(integer) 0 # 不含有zhangsan1
1234
SMembers
获取集合中的所有的元素
127.0.0.1:6379> smembers stu
1) "lisi"
2) "zhangsan"
3) "wangwu"
1234
SRem
删除集合中指定的元素,如果集合中不含有该元素,则忽略,返回0
127.0.0.1:6379> srem stu lisi
(integer) 1
127.0.0.1:6379> srem stu aa
(integer) 0 # 集合中不含有 aa 返回0
127.0.0.1:6379> smembers stu
1) "zhangsan"
2) "wangwu"
1234567
SRandMember
随机返回集合中的元素,redis2.6之后可以在命令后加一个count参数,指定随机返回的元素的个数,如果count大于集合中的个数,则返回所有的元素。负数的话取绝对值
127.0.0.1:6379> srandmember stu
"zhangsan" # 取一个随机值
127.0.0.1:6379> srandmember stu
"bobo"
127.0.0.1:6379> srandmember stu
"dpb"
127.0.0.1:6379> srandmember stu 3
1) "bobo" #取三个随机值
2) "dpb"
3) "wangwu"
127.0.0.1:6379> srandmember stu 3
1) "bobo"
2) "dpb"
3) "lisi"
127.0.0.1:6379> srandmember stu 100
1) "lisi" # 大于总的个数,去所有值
2) "dpb"
3) "bobo"
4) "zhangsan"
5) "wangwu"
127.0.0.1:6379> srandmember stu -2
1) "dpb" # 负数取绝对值 两个
2) "zhangsan"
127.0.0.1:6379> srandmember stu -2
1) "lisi"
2) "dpb"
1234567891011121314151617181920212223242526
Spop
和srandmember类似,只是spop会将获取的元素移除而srandmember不会移除元素|
127.0.0.1:6379> smembers stu
1) "bobo"
2) "zhangsan"
3) "dpb"
4) "lisi"
5) "wangwu"
127.0.0.1:6379> spop stu 2
1) "zhangsan" # 随机获取两个元素并移除
2) "dpb"
127.0.0.1:6379> smembers stu
1) "bobo"
2) "lisi"
3) "wangwu"
12345678910111213
SMove
将元素从一个集合移动到另一个集合中
127.0.0.1:6379> smembers stu
1) "bobo"
2) "lisi"
3) "wangwu"
127.0.0.1:6379>
127.0.0.1:6379> smove stu stu1 bobo
(integer) 1
127.0.0.1:6379> smembers stu
1) "lisi"
2) "wangwu"
127.0.0.1:6379> smembers stu1
1) "bobo"
123456789101112
SDiff
返回两个集合的差集
127.0.0.1:6379> smembers stu
1) "lisi"
2) "wangwu"
127.0.0.1:6379> smembers stu1
1) "bobo"
127.0.0.1:6379> sdiff stu stu1
1) "lisi"
2) "wangwu"
127.0.0.1:6379> sdiff stu1 stu
1) "bobo"
12345678910
SDiffStore
和sdiff类似,不同的是会将差集结果保存起来
127.0.0.1:6379> sdiffstore stu2 stu1 stu
(integer) 1
127.0.0.1:6379> smembers stu2
1) "bobo"
1234
SInter
获取两个集合的交集
127.0.0.1:6379> smembers stu
1) "lisi"
2) "wangwu"
127.0.0.1:6379> smembers stu2
1) "lisi"
2) "bobo"
127.0.0.1:6379> sinter stu stu2
1) "lisi" #两个集合中都有lisi
12345678
SInterStore
获取两个集合的交接并将结果保存起来了。
127.0.0.1:6379> sinterstore stu3 stu stu2
(integer) 1
127.0.0.1:6379> smembers stu3
1) "lisi"
1234
SUnion
获取两个集合的并集。
127.0.0.1:6379> sunion stu stu2
1) "bobo"
2) "lisi"
3) "wangwu"
1234
SunionStore
获取两个集合的并集并保存起来
127.0.0.1:6379> sunionstore stu3 stu stu2
(integer) 3
127.0.0.1:6379> smembers stu3
1) "bobo"
2) "lisi"
3) "wangwu"