文章目录
- 🍃前言
- 🌳普通命令
- 🚩sadd
- 🚩smembers
- 🚩sismember
- 🚩scard
- 🚩spop
- 🚩smove
- 🚩srem
- 🌲集合间操作
- 🚩sinter
- 🚩sinterstore
- 🚩sunion
- 🚩sunionstore
- 🚩sdiff
- 🚩sdiffstore
- 🎍集合类型的内部编码
- 🍀集合类型的使用场景
- ⭕总结
🍃前言
集合类型是用来保存多个字符串类型的元素的,但和列表类型是不同的,集合中
- 元素之间是⽆序的
- 元素不允许重复。
⼀个集合中最多可以存储 2^32 - 1 个元素。Redis 除了⽀持集合内的增删查改操作,同时还⽀持多个集合取交集、并集、差集,合理地使⽤好集合类型,能在实际开发中解决很多问题
🌳普通命令
🚩sadd
将⼀个或者多个元素添加到 set 中。注意,重复的元素⽆法添加到 set 中。
语法:
sadd key member [member ...]
时间复杂度:
- O(1)
返回值:
- 本次添加成功的元素个数
🚩smembers
获取⼀个 set 中的所有元素,注意,元素间的顺序是⽆序的。
语法:
semembers key
时间复杂度:
- O(N)
返回值:
- 所有元素的列表。
🚩sismember
判断⼀个元素在不在 set 中。
语法:
sismember key member
时间复杂度:
- O(1)
返回值:
- 1 表⽰元素在 set 中。0 表⽰元素不在 set 中或者 key 不存在。
🚩scard
获取⼀个 set 的基数(cardinality),即 set 中的元素个数。
语法:
scard key
时间复杂度:
- O(1)
返回值:
- set 内的元素个数。
🚩spop
从 set 中删除并返回⼀个或者多个元素。注意,由于 set 内的元素是⽆序的,所以取出哪个元素实际是未定义⾏为,是随机的
语法:
spop key [count]
时间复杂度:
- O(N), n 是 count
返回值:
- 取出的元素。
🚩smove
将⼀个元素从源 set 取出并放⼊⽬标 set 中。
语法:
smove source destination member
时间复杂度:
- O(1)
返回值:
- 1 表⽰移动成功,0 表⽰失败
🚩srem
将指定的元素从 set 中删除。
语法:
srem key member [member ...]
时间复杂度:
- O(N), N 是要删除的元素个数.
返回值:
- 本次操作删除的元素个数。
🌲集合间操作
对于集合,我们有三种基本操作,分别为交集、并集、差集
🚩sinter
获取给定 set 的交集中的元素
语法:
sinter key [key ...]
时间复杂度:
- O(N * M), N 是最⼩的集合元素个数. M 是最⼤的集合元素个数.
返回值:
- 交集的元素。
🚩sinterstore
获取给定 set 的交集中的元素并保存到⽬标 set 中。
语法:
sinterstore destination key [key ...]
时间复杂度:
- O(N * M), N 是最⼩的集合元素个数. M 是最⼤的集合元素个数.
返回值:
- 交集的元素个数
🚩sunion
获取给定 set 的并集中的元素。
语法:
sunion key [key ...]
时间复杂度:
- O(N), N 给定的所有集合的总的元素个数.
返回值:
- 并集的元素
🚩sunionstore
获取给定 set 的并集中的元素并保存到⽬标 set 中。
语法:
sunionstore destination key [key ...]
时间复杂度:
- O(N), N 给定的所有集合的总的元素个数.
返回值:
- 并集的元素个数。
🚩sdiff
获取给定 set 的差集中的元素
语法:
sdiff key [key ...]
时间复杂度:
- O(N), N 给定的所有集合的总的元素个数.
返回值:
- 差集的元素
🚩sdiffstore
获取给定 set 的差集中的元素并保存到⽬标 set 中
语法:
sdiffstore destination key [key ...]
时间复杂度:
- O(N), N 给定的所有集合的总的元素个数.
返回值:
- 差集的元素个数
🎍集合类型的内部编码
集合类型的内部编码有两种:
- intset(整数集合):当集合中的元素都是整数并且元素的个数⼩于set-max-intset-entries 配置(默认 512 个)时,Redis 会选⽤ intset 来作为集合的内部实现,从⽽减少内存的使⽤。
- hashtable(哈希表):当集合类型⽆法满⾜ intset 的条件时,Redis 会使⽤ hashtable 作为集合的内部实现。
🍀集合类型的使用场景
集合类型⽐较典型的使⽤场景是标签(tag)。
例如 A ⽤⼾对娱乐、体育板块⽐较感兴趣,B⽤⼾对历史、新闻⽐较感兴趣,这些兴趣点可以被抽象为标签。有了这些数据就可以得到喜欢同⼀个标签的⼈,以及⽤⼾的共同喜好的标签,这些数据对于增强⽤⼾体验和⽤⼾黏度都⾮常有帮助。
例如⼀个电⼦商务⽹站会对不同标签的⽤⼾做不同的产品推荐
⭕总结
关于《【Redis】 关于 Redis 集合类型》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下