
一. 概述
 首先我们来看看Redis中的Set类型有什么特点。
 与List相比,Set集合中的元素不允许重复,一个集合中最多可以对应2^32-1(4294967295)个元素。

Set除了可以执行增删改查的命令之外,还支持交集、并集、差集等的计算。
 二. 基本命令
 对我们来说,常用的Set命令有如下几种。

文章底部扫码,免费领取Redis资料大礼包!
- 插入操作
#插入: 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"
 三. 交集、并集、差集
 除了以上几种基本的操作之外,我们还可以计算集合的交集、并集、差集。
- 计算交集  
文章底部扫码,免费领取Redis资料大礼包!
#新增学生数据:张三 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"
- 计算并集  
#集合合并,并且重复部分只保留一份
 192.168.65.15:6379> sunion student1 student2
- "20"
- "boy"
- "22"
- "zs"
- "ls"
- 计算差集  
文章底部扫码,免费领取Redis资料大礼包!
#sdiff key1 key2 结果是 key1中去重重复部分
 192.168.65.15:6379> sdiff student1 student2
- "20"
- "zs"
- 保存结果
 最后我们把上述操作的命令完整地展示在下面。
#计算交集,并保存
 #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应用在哪些地方呢?以下是我们总结出来的一些常见应用场景。 
文章底部扫码,免费领取Redis资料大礼包!
#用户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 6 入门到实战教程,redis底层原理+redis分布式锁  也可以扫码直接观看视频哦!绝对的干货满满,更多精彩视频B站搜索“千锋教育” 



















