Redis 数据结构 集合(set)(五)
集合(set) 类型也是用来保存多个的字符串元素,但和列表类型不一样的是,集合中不允许有重复的元素。(ps,如果重复了,一个集合下如何区分那个元素是那个元素呢?);并且集合中的元素是无序的,不能通过索引下标获取元素。一个集合最多可以存储2^32 -1 个元素。Redis除了支持集合的增删改查,同时还支持多个集合取交集,并集,差集。
基本命令:
1、添加元素,返回添加成功的个数
sadd key element [element ...]
2、删除元素
srem key element [element ...]
3、计算元素个数
scard key
4、 判断元素是否在集合中
sismember key element
5、随机从集合返回指定个数元素 ,count 如果不写,默认为1
srandmember key [count]
6、从集合随机弹出元素
spop key [count]
注:srandmember和spop都是从集合随机选出元素,不同的是,spop执行后会从集合中删除该元素。而srandmember不会删除该元素。
7、获取所有元素,返回结果无序
smembers key
集合间的操作
求多个集合交集
sinter key [key ...]
求多个集合并集
sunion key [key ...]
求多个集合差集
sdiff key [key ...]
将差集、并集、交集的结果保存
sdiffstore destination key [key ...]
sunionstore destination key [key ...]
sinterstore destination key [key ...]
集合间的运算元素较多的情况下会比较耗时,所以redis提供了上面三个命令(原命令+store)将集合间的交集、并集、差集的结果保存在destination 中,后面的key表示需要求交、并、差集的集合。
127.0.0.1:6379> sinterstore targerKey coll2 coll3
(integer) 25
内部编码
集合类型的内部编码有两种
intset(整数集合) 当集合中的元素都是整数且元素个数小于st-max-intet-entries配置(默认512个),redis会选用intset来作为集合的内部实现,二减少内存的使用
hashtable(哈希表) 当集合类型无法满足intset的条件时,redis会使用hashtable作为集合的内部实现。
使用场景
集合类型比较典型的使用场景就是标签(tag),如一个用户可能对娱乐,体育比较感兴趣,另一个用户对历史,新闻比较感兴趣,这些兴趣点就是标签。
注:用户和标签的关系维护应该在一个事务内执行,防止部分命令失败造成数据不一致。
常用场景组合:
sadd =Tagging(标签)
spop/srandmember =Random item (生成随机数,如抽奖)
sadd + sinter = Social Graph (社交,求共同兴趣爱好等)
阅读更多
- Redis-数据结构(字符串集合set)
- Redis-数据结构(有序字符串集合sorted set)
- Redis 数据结构之有序集合(sort set)
- redis中sortset跳表数据结构
- Redis基础之数据类型(Set无序集合)
- JavaScript数据结构与算法之集合(Set)
- js中数据结构数组Array、映射Map、集合Set、对象、JSON
- Redis五大数据类型之无序集合set
- NoSQL之Redis对set(集合)数据类型的操作之一
- Redis笔记7:数据类型之有序集合(sorted set)
- Redis数据类型与指令详解之集合(t_set)
- Redis和nosql简介,api调用;Redis数据功能(String类型的数据处理);List数据结构(及Java调用处理);Hash数据结构;Set数据结构功能;sortedSet(有序集合)数
- Python数据结构之集合Set
- python基础数据结构——列表(list), 元祖(tuple), 字典(dict), 字符串(string), 集合(set) 介绍及相互转换
- Redis和nosql简介,api调用;Redis数据功能(String类型的数据处理);List数据结构(及Java调用处理);Hash数据结构;Set数据结构功能;sortedSet(有序集合)数
- redis内存编码数据结构(整数集合、压缩列表)
- python基础语法-python三大内建数据结构之集合(set)
- (六)Redis之数据结构之Set
- 源码分析redis的有序集合,学习skiplist跳跃表数据结构
- Redis系列-6.集合(Set)结构