前言
集合类型 保存多个字符串类型的元素;
与list 列表不同,集合中 元素之间是无序的并且元素不允许重复。
redis除了支持集合内的增删查改之外,还支持多个集合取交集、并集、差集等操作。
基本命令
-
sadd
sadd key member [member...]
将一个或多个元素添加到set中;无法添加重复的元素
返回值:本次添加成功的元素个数

-
smembers
smembers key
获取一个 set 列表中的所有元素

-
scard
scard key
获取一个 set 列表中的元素个数

-
srem
srem key member [member...]
删除 set 列表中的一个或者多个元素
返回值:删除成功元素的个数

-
spop
spop key [count]
从set 中删除并返回一个或多个元素。
set 内部元素是无序的,所以具体取出哪一个元素是未定义行为,可以当做随机的

-
srandmember
srandmember key [count]
随机返回 set 中的一个或多个元素

-
sismember
sismember key member
判断 set 当中是否存在元素 member
返回值:1表示存在,0表示不存在

-
sinter、sunion、sdiff
sinter key [key...]
sunion key [key...]
sdiff key [key...]
sinter 对多个 set 取交集并返回
sunion 对多个 set 取并集并返回
sdiff 对多个 set 取差集并返回

-
sinterstore、sunionstore、sdiffstore
sinterstore destination key [key...]
sunionstore destination key [key...]
sdiffstore destination key [key...]
sinter、sunion、sdiff 都是将结果返回;而sinterstore、sunionstore、sdiffstore则是将结果放到 destination 目标key对应的 set 当中

sinterstore、sunionstore、sdiffstore则是将结果放到 destination 目标key对应的 set 当中
外链图片转存中...(img-DOHDNcXe-1770885014525)
内部编码
Redis Set 的内部编码主要有 intset 和 hashtable 两种。当集合中全是整数且元素数量比较少时,Redis 会使用 intset(整数集合),它以连续内存存储所有元素,采用二分查找,虽然时间复杂度为 O(log n),但内存占用极低,非常适合小规模整数集合场景。
一旦集合中混入非整数元素,或者元素数量比较多,Redis 就会自动将其编码切换为 hashtable(哈希表)。hashtable 支持任意类型元素,读写都是 O(1) 级别,通用性强,但内存开销也更大。需要注意的是,这种编码转换是单向的,即使后续删到只剩少量整数,也不会退回 intset。
本篇文章到这里就结束了,感谢支持
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2oul0hvapjsws