首页 > 其他 > 详细

Redis数据结构---集合

时间:2020-11-13 18:09:00      阅读:29      评论:0      收藏:0      [点我收藏+]

集合(set) 类型也是用来保存多个的字符串元素, 但和列表类型不一样的是, 集合中不允许有重复元素, 并且集合中的元素是无序的, 不能通过索引下标获取元素

一个集合最多可以存储232-1个元素。

Redis除了支持集合内的增删改查,同时还支持多个集合取交集、 并集、 差集,合理地使用好集合类型,能在实际开发中解决很多实际问题

 

常用命令

添加元素
sadd key element [element ...]

删除元素
srem key element [element ...]

计算元素个数
scard key
注:scard的时间复杂度为O(1),它不会遍历集合所有元素, 而是直接用Redis内部的变量

判断元素是否在集合中
sismember key element
如果给定元素element在集合内返回1, 反之返回0

随机从集合返回指定个数元素
srandmember key [count]
[count]是可选参数, 如果不写默认为1

从集合随机弹出元素
spop key [count]
注:srandmember和spop都是随机从集合选出元素, 两者不同的是spop命令执行后, 元素会从集合中删除, 而srandmember不会。

获取所有元素
smembers key
注:smembers和lrange、 hgetall都属于比较重的命令, 如果元素过多存在阻塞Redis的可能性, 这时候可以使用sscan来完成


求多个集合的交集
sinter key [key ...]

求多个集合的并集
suinon key [key ...]

求多个集合的差集
sdiff key [key ...]

将交集、 并集、 差集的结果保存
sinterstore destination key [key ...]
suionstore destination key [key ...]
sdiffstore destination key [key ...]

 

命令复杂度

技术分享图片

 

内部编码

集合类型的内部编码有两种:
·intset(整数集合) : 当集合中的元素都是整数且元素个数小于set-maxintset-entries配置(默认512个) 时,Redis会选用intset来作为集合的内部实现, 从而减少内存的使用。
·hashtable(哈希表) : 当集合类型无法满足intset的条件时, Redis会使用hashtable作为集合的内部实现。

 

使用场景

集合类型比较典型的使用场景是标签(tag

集合类型的应用场景通常为以下几种:

·sadd=Tagging(标签)
·spop/srandmember=Random item(生成随机数, 比如抽奖)
·sadd+sinter=Social Graph(社交需求)

 

Redis数据结构---集合

原文:https://www.cnblogs.com/MacoLee/p/13960078.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!