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

前言

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

正文

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

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

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

简单介绍一下命令:

sadd 提供添加程序:

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

srem 表示删除:

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

scard key 表示集合个数:

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

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

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

srandmember key count 随机从集合中取出几个数字。
redis 简单整理——redis 的集合基本结构和命令[五]

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

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

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

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

求两个集合的交集:

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

求两个集合的并集:

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

求多个集合的差集:

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

图片:

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

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

sinterstore destination key [key ...] 
suionstore destination key [key ...] 
sdiffstore destination key [key ...]

集合常用命令时间复杂度:

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

内部编码:

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

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

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

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

使用场景

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

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

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

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

示例:

给用户添加标签

sadd user:1:tags tag1 tag2 tag5 

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

sadd user:k:tags tag1 tag2 tag4 ...

或者给标签添加用户:

sadd tag1:users user:1 user:3 

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

sadd tagk:users user:1 user:2 ...

删除用户标签:

srem user:1:tags tag1 tag5

删除标签下的用户:

srem tag1:users user:1 

srem tag5:users user:1

计算用户共同感兴趣的标签:

sinter user:1:tags user:2:tags

其他的一些需求:

sadd=Tagging(标签) 

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

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

下一节有序集合。

上一篇:redis--set(无序集合)--的常用命令,应用


下一篇:redis集合sAdd写入不进去问题之一