06-Redis的Set类型

List和Set的异同

  • List
    • 可以重复:list元素是可以重复的
    • 无序:集合里面的元素是无序的
    • 有序:是元素的插入和弹出有序
  • Set
    • 去重:set集合去重了的,元素不会有重复的
    • 无序:集合里面的元素是无序的
    • 无序:元素插入和弹出是无序的

常用的命令

在这里插入图片描述

命令演示

127.0.0.1:7000> sadd k1 hello	#添加 1个元素到集合
(integer) 1
127.0.0.1:7000> sadd k1 world	#再次添加 1个元素到集合
(integer) 1
127.0.0.1:7000> sadd k1 world	#添加已有的元素到集合,会被忽略,返回0,命令失败
(integer) 0
127.0.0.1:7000> SMEMBERS k1		#返回k1集合所有的元素
1) "hello"
2) "world"
127.0.0.1:7000> SCARD k1	#返回k1集合元素的数量
(integer) 2
127.0.0.1:7000> SCARD k2	#返回k2集合元素的数量,k2还不存在,所以返回为0
(integer) 0
-----------------------------------------------------------------------------------------------------------
127.0.0.1:7000> sadd k2 1 2 3 4 5 6 7 8 9 10
(integer) 10
127.0.0.1:7000> SISMEMBER k2 2		#检测2是否是k2集合的成员,是返回1
(integer) 1
127.0.0.1:7000> SISMEMBER k2 20		#检测20是否是k2集合的成员,不是返回0
(integer) 0
127.0.0.1:7000> SRANDMEMBER k2 3	#随机返回3个k2集合的成员
1) "8"
2) "3"
3) "9"
127.0.0.1:7000> SRANDMEMBER k2 3
1) "4"
2) "8"
3) "7"
127.0.0.1:7000> SRANDMEMBER k2 15	#15>10,超出了集合的大小,所以返回全部k2集合的成员
 1) "1"
 2) "2"
 3) "3"
 4) "4"
 5) "5"
 6) "6"
 7) "7"
 8) "8"
 9) "9"
10) "10"
127.0.0.1:7000> SRANDMEMBER k2 -4	#负数,且绝对值小于10,所以随机返回k2集合的4个成员
1) "7"
2) "9"
3) "10"
4) "1"
127.0.0.1:7000> SRANDMEMBER k2 -20	·#负数,且绝对值大于10,所以返回K2集合的全部成员,但是顺序随机
 1) "4"
 2) "3"
 3) "4"
 4) "4"
 5) "5"
 6) "10"
 7) "3"
 8) "9"
 9) "5"
10) "6"
11) "2"
12) "10"
13) "6"
14) "9"
15) "6"
16) "2"
17) "4"
18) "6"
19) "5"
20) "5"
127.0.0.1:7000> SRANDMEMBER k2	#不带count的话,默认随机返回一个成员
"10"
127.0.0.1:7000> SRANDMEMBER k2
"5"
127.0.0.1:7000> spop k2 2	#移除并返回K2集合2个元素
1) "2"
2) "8"
127.0.0.1:7000> SMEMBERS k2	#2和8已经被移除了
1) "1"
2) "3"
3) "4"
4) "5"
5) "6"
6) "7"
7) "9"
8) "10"
127.0.0.1:7000> spop k2
"4"
127.0.0.1:7000> SMEMBERS k2
1) "1"
2) "3"
3) "5"
4) "6"
5) "7"
6) "9"
7) "10"
127.0.0.1:7000> spop k2 20	#20大于了集合的个数,移除和返回全部成员
1) "1"
2) "3"
3) "5"
4) "6"
5) "7"
6) "9"
7) "10"
127.0.0.1:7000> SMEMBERS k2	#K2集合为空了
(empty array)

差集

127.0.0.1:7000> sadd k3  a b c
(integer) 3
127.0.0.1:7000> sadd k4 c
(integer) 1
127.0.0.1:7000> sadd k5 b c e 
(integer) 3
127.0.0.1:7000> SDIFF k3 k4 	#求差集,k3是第一个集合,即求出的交集是元素在K3而不在k4,换言之可以表示为k3-(k3交k4)
1) "a"
2) "b"
127.0.0.1:7000> SDIFF k3 k5 
1) "a"
127.0.0.1:7000> SDIFF k3 k4 k5
1) "a"
127.0.0.1:7000> SDIFFSTORE k6 k3 k4 k5	#求出的差集存储在k6这个集合中
(integer) 1
127.0.0.1:7000> SMEMBERS k6	#验证上一步结果
1) "a"

交集

127.0.0.1:7000> sadd k1 a b c d 
(integer) 4
127.0.0.1:7000> sadd k2 c
(integer) 1
127.0.0.1:7000> sadd k3 a c e 
(integer) 3
127.0.0.1:7000> SINTER k1 k2 k3		#求交集
1) "c"
127.0.0.1:7000> SINTERSTORE destk1 k1 k2 k3		#求交集,并把结果存储在另外一个集合中
(integer) 1
127.0.0.1:7000> SMEMBERS destk1		#验证上一步的结果
1) "c"
127.0.0.1:7000> 

并集

127.0.0.1:7000> sadd k1 a b c d
(integer) 4
127.0.0.1:7000> sadd k2 c
(integer) 1
127.0.0.1:7000> sadd k3  a c e 
(integer) 3
127.0.0.1:7000> SUNION k1 k2 k3		#并集
1) "d"
2) "c"
3) "b"
4) "a"
5) "e"
127.0.0.1:7000> SUNIONSTORE destk1 k1 k2 k3	 #求出这3个集合的交集,并存储在另外一个集合中
(integer) 5
127.0.0.1:7000> SMEMBERS destk1		#验证上一步的结果
1) "d"
2) "c"
3) "b"
4) "a"
5) "e"
127.0.0.1:7000> 
127.0.0.1:7000> sadd k1 1 2 3 4 5 6 7
(integer) 7
127.0.0.1:7000> sadd k2 one two
(integer) 2
127.0.0.1:7000> sadd k2 10 20 30
(integer) 3
127.0.0.1:7000> SMEMBERS k2
1) "one"
2) "10"
3) "20"
4) "two"
5) "30"
127.0.0.1:7000> SMOVE k1 k2 1	#移除1
(integer) 1
127.0.0.1:7000> SMOVE k1 k2 2	#移除2
(integer) 1
127.0.0.1:7000> SMOVE k1 k2 3 4		#只能移除1个元素,所以报错
(error) ERR wrong number of arguments for 'smove' command
127.0.0.1:7000> SMOVE k1 k2 3
(integer) 1
127.0.0.1:7000> SMEMBERS k1		#K1前面3个元素都被移除了,k2增加了这3个元素
1) "4"
2) "5"
3) "6"
4) "7"
127.0.0.1:7000> SMEMBERS k2		#K1前面3个元素都被移除了,k2增加了这3个元
1) "1"
2) "30"
3) "two"
4) "one"
5) "10"
6) "3"
7) "20"
8) "2"
127.0.0.1:7000> 
127.0.0.1:7000> SMOVE k1 k3 7		#移除一个元素到不存在的一个集合时,新建一个集合K3,然后元素移除到K3中
(integer) 1
127.0.0.1:7000> SMEMBERS k3		#验证上一步的结果
1) "7"

127.0.0.1:7000> SMEMBERS k2		#查看K2的元素
1) "1"
2) "30"
3) "two"
4) "one"
5) "10"
6) "3"
7) "20"
8) "2"
127.0.0.1:7000> SREM  k2 1 30	#被移除的元素在k2集合中
(integer) 2
127.0.0.1:7000> SMEMBERS k2		#1和30已经被移除了
1) "two"
2) "one"
3) "10"
4) "3"
5) "20"
6) "2"
127.0.0.1:7000> SREM  k2 100	#被移除的元素100不在K2集合中,该操作被忽略,直接返回0
(integer) 0
127.0.0.1:7000> SREM  k4 100	#被移除的集合不存在,直接返回0
(integer) 0
127.0.0.1:7000> 

应用场景

  • 1、srandmember的使用场景
    • 送礼物,礼物有3个,但是人很多。这个怎么做呢?这个一般是要这3个礼物被不同的人领取,所以要去重。srandemember key +3。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值