瑜伽论坛

注册

 

发新话题 回复该主题

快速了解redis五种数据类型zs [复制链接]

1#
中科白癜风公益惠民活动 http://pf.39.net/bdfyy/bdfrczy/171021/5779537.html

大家好,我又回来了。

前言

五一用来休息了,现在将redis五种常见数据类型中最后的一种,zset类型的讲解完。

可以说,zset的数据类型是redis这几个数据类型中,最复杂,也是最灵活的一种类型。它的中文翻译,为有序集合,顾名思义,他的数据排列是按照一定的顺序排列的,基于这个特性,我们也经常用zset类型来存储需要排行的数据。

ZSETZSET的结构

说到zset的结构,我们需要先回顾下set的数据结构是怎样的:其中字符型的set结构,是基于字典来实现的,其中字典的值为null。有序集合zset的结构从表现形式上说,也是基于该结构,不同的点在于,存储数据的字典,它的值不为null,而是我们设置的score,可理解为key的权重值。如我们保存我们最喜欢的几种水果:那么,我们查询favoritefruit的时候,他就会按数值大小顺序排列返回

常用指令

有序集合的指令比较多,我们这阶段可以基于目标来学习,也即是完成最常用的,或即将使用的指令进行学习。

ZADD添加元素

#ZADDzsetscoremember.0.0.1ADD"favoritefruit"1Apple(integer)1.0.0.1ADD"favoritefruit"2Banana(integer)1.0.0.1ADD"favoritefruit"3Orange(integer)1

ZADD指令执行成功后,会返回添加成功的元素数量,我们也可以一次性地录入多个元素,如ZADD"favoritefruit"1Apple2Banana3Orange;另外,ZADD也可更新成员的分值,如,我们觉得香蕉才是最爱,则可将Apple和Banana的分值对调

.0.0.1ADD"favoritefruit"2Apple(integer)1.0.0.1ADD"favoritefruit"1Banana(integer)1

注意:这里的更新是更新成员的分值,如果你想把苹果改为桃子peach,操作要分两步,移除apple,添加peach。这是因为字典的key值是不具备变更的。

参数XX只执行更新

ZADD可支持可选参数来显示执行相应的指令,XX表示ZADD将只执行对已存在的元素进行更新

#ZADDzset[XX]scoremember.0.0.1:ZADD"favoritefruit"XX4Orange(integer)0.0.0.1:ZADD"favoritefruit"XXCH3Orange(integer)1

我们尝试将Orange的分数从3改成4,发现返回值为0,这是因为redis返回值是表示当前新增的元素数量,如果我们想知道是否修改,可再加多一个参数CH

参数NX只执行新增

NX参数则表示只执行对未存在的元素进行新增,对已存在的元素不做任何操作,如,我们将peach添加到我们喜欢的水果中

.0.0.1:ZADD"favoritefruit"NX4Peach(integer)1ZREM移除元素

比如,我们不喜欢桃子了,想把桃子从最喜欢的水果集合中移除

#ZREMzsetmember.0.0.1:ZREM"favoritefruit"Peach(integer)1

如果我们想批量移除,可以多个元素一起移除,指令成功后,会返回移除元素的数量

ZSCORE获取元素的分值

我们想查看下在我的心目中,苹果是不是我的最爱

#ZSCOREzsetmember.0.0.1:ZSCORE"favoritefruit"Apple"1"

可以看出,苹果排在第一位

ZINCRBY对元素的分值自增

之前我们把香蕉放在了第二位,有天吃腻了,觉得橘子比香蕉好吃,我们就把香蕉的排位往后移一位,橘子往前移一位

#ZINCRBYzsetnumbermember.0.0.1:ZINCRBY"favoriatefruit"1Banana"3".0.0.1:ZINCRBY"favoriatefruit"-1Orange"2"

注意,incrby是将增加number,如果要做减法,则通过加负数的形式完成减法操作

ZCARD查询集合的大小

现在我们看看我们记录的最喜欢的水果有多少种

#ZCARDzset.0.0.1:zcard"favoritefruit"(integer)4ZRANGE获取指定范围内的元素

我们想把前三名的水果都查出来,则可以通过zrange来查出来

#ZRANGEzsetstartend.0.0.1:ZRANGE"favoritefruit")"Apple"2)"Orange"3)"Banana"

这里的startend是从0开始的,0,1,2即是前三位

ZRANK获取元素在集合中的排名

.0.0.1:zrank"favoritefruit"Apple(integer)0

由此可见,如果我们把程序上的顺序转化成用户可理解的顺序的话,需要将集合的排名值加一

推荐系统核心实现

好了,我们来到推荐系统的核心实现环节,可以说,推荐系统在我们生活中经常可见,如我经常逛的b站:

我平时喜欢财经、IT,休闲时看看LOL,也

分享 转发
TOP
发新话题 回复该主题