一分钟带你了解Redis数据类型-Set
首先我们来看看Redis中的Set类型有什么特点。
与List相比,Set集合中的元素不允许重复,一个集合中最多可以对应2^32-1(4294967295)个元素。
Set除了可以执行增删改查的命令之外,还支持交集、并集、差集等的计算。
二. 基本命令
对我们来说,常用的Set命令有如下几种。
插入操作
#插入: 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"
三. 交集、并集、差集
除了以上几种基本的操作之外,我们还可以计算集合的交集、并集、差集。
计算交集
#新增学生数据:张三 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"
计算差集
#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应用在哪些地方呢?以下是我们总结出来的一些常见应用场景。
#用户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
猜你喜欢LIKE
相关推荐HOT
更多>>servlet底层原理是什么?
1、ServletAPI核心类与接口2、Servlet类处理请求的流程创建servlet类的步骤:创建一个命名为TestServlet继承javax.servlet.http.HttpServlet类详情>>
2023-05-30 10:41:22多线程的优势与劣势分别是什么?
多线程是指在同一个程序中,同时运行多个线程,每个线程都可以独立执行不同的任务,相互之间不会干扰。多线程的优势和劣势如下:优势:提高程序...详情>>
2023-05-30 10:32:12设计模式之生产者与消费者的代码实现
本文主要讲述生产者和消费者模式,文中会使用通俗易懂的案例,使你更好地学习本章知识点并理解原理,做到有道无术。什么是生产者和消费者模式生...详情>>
2023-05-30 10:25:46从零开始学Java之interface接口
一.接口简介简介Java中的接口(interface)类似于是一种特殊的抽象类,它也是众多抽象方法的集合。接口的定义方式、组成部分都与抽象类相似,却比...详情>>
2023-05-29 11:26:17热门推荐
如何进行mysql数据备份?
沸什么是servlet的生命周期?servlet请求处理流程是怎样的?
热servlet底层原理是什么?
热怎样编写java程序?
新多线程的优势与劣势分别是什么?
ssm框架的作用与原理是什么?
设计模式之生产者与消费者的代码实现
接口和抽象类有什么区别?4个方面对比
从零开始学Java之interface接口
从零开始学Java之Java中的内部类是怎么回事?
一分钟带你了解MySQL——基础与介绍
在java中,super关键字怎样使用
什么是事件流以及事件流的传播机制 ?
弹性盒有哪些属性是在父元素身上?