微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

redis 简单整理——redis 的集合基本结构和命令[五]

前言

@H_502_2@简单介绍一下集合的基本结构和命令。

正文

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

@H_502_2@一个集合最多可以存储232-1个元 素。Redis除了支持集合内的增删改查,同时还支持多个集合取交集、并 集、差集,合理地使用好集合类型,能在实际开发中解决很多实际问题。

@H_502_2@

@H_502_2@简单介绍一下命令:

@H_502_2@sadd 提供添加程序:

@H_502_2@

@H_502_2@srem 表示删除:

@H_502_2@

@H_502_2@scard key 表示集合个数:

@H_502_2@

@H_502_2@sismember key element 查看某个元素是否在集合中。

@H_502_2@

@H_502_2@srandmember key count 随机从集合中取出几个数字。

@H_502_2@spop key count 随机从集合中弹出几个数字。

@H_502_2@

@H_502_2@上面也提及到了smembers 表示列出全部数据。

@H_502_2@下面就是一些集合之间的操作了。

@H_502_2@求两个集合的交集:

@H_502_2@

@H_502_2@求两个集合的并集:

@H_502_2@

@H_502_2@求多个集合的差集:

@H_502_2@

@H_502_2@图片:

@H_502_2@

@H_502_2@将交集、并集、差集的结果保存:

sinterstore destination key [key ...] 
suionstore destination key [key ...] 
sdiffstore destination key [key ...]
@H_502_2@集合常用命令时间复杂度:

@H_502_2@

@H_502_2@内部编码:

@H_502_2@集合类型的内部编码有两种:

@H_502_2@·intset(整数集合):当集合中的元素都是整数且元素个数小于set-max- intset-entries配置(认512个)时,

@H_502_2@Redis会选用intset来作为集合的内部实 现,从而减少内存的使用。

@H_502_2@·hashtable(哈希表):当集合类型无法满足intset的条件时,Redis会使 用hashtable作为集合的内部实现

使用场景

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

@H_502_2@例如一个用户可能对娱 乐、体育比较感兴趣,另一个用户可能对历史、新闻比较感兴趣,这些兴趣 点就是标签

@H_502_2@有了这些数据就可以得到喜欢同一个标签的人,以及用户的共 同喜好的标签,这些数据对于用户体验以及增强用户黏度比较重要。

@H_502_2@例如一 个电子商务的网站会对不同标签用户做不同类型的推荐,比如对数码产品 比较感兴趣的人,在各个页面或者通过邮件的形式给他们推荐最新的数码产 品,通常会为网站带来更多的利益。

@H_502_2@示例:

@H_502_2@给用户添加标签

sadd user:1:tags tag1 tag2 tag5 

sadd user:2:tags tag2 tag3 tag5 ... 

sadd user:k:tags tag1 tag2 tag4 ...
@H_502_2@或者给标签添加用户:

sadd tag1:users user:1 user:3 

sadd tag2:users user:1 user:2 user:3 ... 

sadd tagk:users user:1 user:2 ...
@H_502_2@删除用户标签:

srem user:1:tags tag1 tag5
@H_502_2@删除标签下的用户:

srem tag1:users user:1 

srem tag5:users user:1
@H_502_2@计算用户共同感兴趣的标签:

sinter user:1:tags user:2:tags
@H_502_2@其他的一些需求:

sadd=Tagging(标签) 

·spop/srandmember=Random item(生成随机数,比如抽奖) 

·sadd+sinter=Social Graph(社交需求)

@H_502_2@下一节有序集合。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐