全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

Redis数据类型Set集合

发布时间:2023-06-13 13:07:00
发布人:zyh

  一. 概述

  首先我们来看看Redis中的Set类型有什么特点。

  与List相比,Set集合中的元素不允许重复,一个集合中最多可以对应2^32-1(4294967295)个元素。

1683695207717.image

  Set除了可以执行增删改查的命令之外,还支持交集、并集、差集等的计算。

  二. 基本命令

  对我们来说,常用的Set命令有如下几种。

1683695228983.image

  1.插入操作  

#插入: sadd key value1 value2 .....
192.168.65.15:6379> sadd student aa bb cc
#返回新增成功value的个数
(integer) 3

#第二次插入,由于存在重复元素,所以不成功
192.168.65.15:6379> sadd student aa bb cc
(integer) 0

  2. 查询操作 ............. 

#查询所有: smembers key
192.168.65.15:6379> smembers student

"aa"
"cc"
"bb"
#查询元素是否存在: sismember key value
192.168.65.15:6379> sismember student aa
#如果存在返回1
(integer) 1
#如果不存在返回0
192.168.65.15:6379> sismember student dd
(integer) 0

#随机返回count个元素: srandmember key count
192.168.65.15:6379> srandmember student 2

"aa"
"cc"
#返回集合元素的个数:scard key
192.168.65.15:6379> scard student
(integer) 3

  3. 删除操作  

#删除元素,返回删除的个数:srem key value...
192.168.65.15:6379> srem student aa
(integer) 1
#查看一下,果然已删除
192.168.65.15:6379> smembers student

"cc"
"bb"
#随机删除元素并返回删除的元素
192.168.65.15:6379> spop student 1

"cc"
#查看一下,果然已删除
192.168.65.15:6379> smembers student

"bb"

  三. 交集、并集、差集

  除了以上几种基本的操作之外,我们还可以计算集合的交集、并集、差集。

  1.计算交集

1683695251793.image  

#新增学生数据:张三 20岁 男
192.168.65.15:6379> sadd student1 zs 20 boy
(integer) 3

#新增学生数据:李四 22岁 男
192.168.65.15:6379> sadd student2 ls 22 boy
(integer) 3

#求这两条数据的交集:boy
192.168.65.15:6379> sinter student1 student2

"boy"

  2.计算并集

1683695266254.image

#集合合并,并且重复部分只保留一份
192.168.65.15:6379> sunion student1 student2

"20"
"boy"
"22"
"zs"
"ls"

  3.计算差集

1683695278254.image

#sdiff key1 key2 结果是 key1中去重重复部分
192.168.65.15:6379> sdiff student1 student2

"20"
"zs"

  4.保存结果

  最后我们把上述操作的命令完整地展示在下面。  

#计算交集,并保存
#sinterstore 保存的key key1 key2
192.168.65.15:6379> sinterstore student_jj student1 student2
(integer) 1
192.168.65.15:6379> smembers student_jj

"boy"
#计算并集,并保存
#sunionstore 保存的key key1 key2
192.168.65.15:6379> sunionstore student_bj student1 student2
(integer) 5
192.168.65.15:6379> smembers student_bj

"20"
"boy"
"22"
"zs"
"ls"
#计算差集,并保存
#sdiffstore 保存的key key1 key2
192.168.65.15:6379> sdiffstore student_cj student1 student2
(integer) 2
192.168.65.15:6379> smembers student_cj

"20"
"zs"
192.168.65.15:6379>

  四. 应用场景

  学习完了Set命令,我们又该把Set应用在哪些地方呢?以下是我们总结出来的一些常见应用场景。

1683695295549.image

#用户1的开发语言标签:
192.168.65.15:6379> sadd user1 java go python
(integer) 3

#用户2的开发语言标签:
192.168.65.15:6379> sadd user2 java net c#
(integer) 3

#用户1和用户2的开发语言共同标签:
192.168.65.15:6379> sinter user1 user2

"java"
#设置一个奖品池:一等奖num1 至 四等奖num4
192.168.65.15:6379> sadd prize num1 num2 num3 num4
(integer) 4
#随机抽取奖品
192.168.65.15:6379> spop prize 1

"num2"
#Redis数据类型

相关文章

flutter为什么不使用kotlin作为开发语言?

flutter为什么不使用kotlin作为开发语言?

2023-10-15
opencv和yolo是什么样的关系?

opencv和yolo是什么样的关系?

2023-10-15
矩阵的2范数与向量的2范数有什么关系?

矩阵的2范数与向量的2范数有什么关系?

2023-10-15
什么是逆强化学习?

什么是逆强化学习?

2023-10-15

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取