【redis】set 类型:基本命令
文章目录
- 基本概念
- SADD 和 SMEMBERS
- SCARD
- SPOP
- SRANDMEMBER
- SMOVE
- SREM
- 集合间操作
- SINTER
- SINTERSTORE
- SUNION
- SUNIONSTORE
- SDIFF
- SDIFFSTORE
- 命令小结
- 内部编码
基本概念
谈到一个属于,这个术语可能有多种含义,set
- 集合
- 设置(和
get
相对应)
集合就是把一些有关联的数据放到一起
-
集合中的元素是无序的(和前面
list
的有序是对应的)- 有序:顺序很重要,变化一下顺序,就是不同的
list
了 - 无序:顺序不重要,变化一下顺序,集合还是那个集合
- 有序:顺序很重要,变化一下顺序,就是不同的
-
集合中的元素是不能重复的(唯一的)
和 list
类似,集合中的每个元素,也都是 string
类型(可以使用 JSON
这样的格式让 string
也能存储结构化数据)
SADD 和 SMEMBERS
- 将一个或者多个元素添加到
set
中,重复的元素无法添加到set
中 - 获取一个
set
中的所有元素,元素之间的顺序是无序的!!!
语法:
SADD key member [member ...]
SMEMBERS key
SADD
返回值:所有元素的列表MEMBERS
返回值:1 表示元素在set
中。0 比哦啊是元素不在set
中或者key
不存在
SCARD
获取一个 set
的基数(cardinality
),即 set
中的元素个数
语法:
SCARD key
- 返回值:
set
中元素的个数
SPOP
从 set
中删除并返回一个或者多个元素。注意,由于 set
内的元素是无序的,所以取出哪个元素实际是未定义行为,即可以看做随机的
语法:
SPOP key [count]
- 返回值:取出的元素
在
Redis
源码中,针对spop
实现的时候,就采取了“生成随机数”的方式
SRANDMEMBER
随机返回元素, 一个或多个
语法:
SRANDMEMBER key
- 返回随机到的元素
SMOVE
将元素从源 set
取出并放入目标 set
中
语法:
SMOVE source destination member
- 1 表示移动成功,0 表示失败
SREM
将制定的元素从 set
中删除
语法:
SREM key member [member ...]
- 返回值:本次操作删除的元素个数
集合间操作
交集(inter
)、并集(union
)、差集(diff
)
- 交集:最终结果同时出现在两个集合中
- 并集:把多个集合中的数据都集中放在一起,如果有元素重复,也最终只保留一份
A
和B
做差集,就是找出哪些元素,在A
中存在,同时再B
中不存在
SINTER
获取给定 set
的交集中的元素
语法:
SINTER key [key ...]
- 返回值:交集的元素
SINTERSTORE
获取给定 set
的交集中的元素并保存到目标 set
中
语法:
SINTERSTORE destination key [key ...]
- 返回值:交集的元素个数
SUNION
获取给定 set
的并集中的元素
语法:
SUNION key [key ...]
- 返回值:并集的元素
SUNIONSTORE
获取给定 set
的并集中的元素并保存到目标 set
中
语法:
SUNIONSTORE destination key [key ...]
- 返回值:并集的元素个数
SDIFF
获取给定 set
的差集中的元素
语法:
SDIFF key [key ...]
- 返回值:差集的元素
SDIFFSTORE
获取给定 set
的差集中的元素并保存到目标 set
中
语法:
SDIFFSTORE destination key [key ...]
- 返回值:差集的元素个数
命令小结
内部编码
intset
(整数集合)
-
为了节省空间,做出的特定优化。当元素均为整数,并且元素个数不是很多的时候
-
hashtable
(哈希表)