Redis初学:9(Zset类型)

Zset(有序集合)类型

简介

Redis里面的有序集合Zset和集合Set非常相似,都是一个没有重复元素的字符串集合。
不同之处是有序集合Zset里面的每个成员都关联了一个评分(score),这个score被用来按照从最低分到最高分的方式排序集合中的元素。
集合中的成员是唯一的,但是评分可以是重复的
因为集合中的元素是有序的,所以我们可以很快地根据评分(score)来获取某个范围内的元素

底层数据结构

SortedSet(Zset)是Redis提供的一个非常特别的数据结构,一方面它等价于Java里面的Map<String,Double>,可以给每个元素value赋予一个权重score,另一方面它又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。
Zset底层使用了两种数据结构。

  1. hash。hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value(field)找到相应的score(value)值
  2. 跳跃表。跳跃表的目的在于给元素value进行排序,根据score的范围获取元素列表。

那么跳跃表的数据结构是啥呢?
我们先来看看普通有序链表查询一个元素的过程,如下图:
在这里插入图片描述
比如我们现在要查找一个元素是51,那得从1开始,一个一个往下一个节点查找,一个要经历5次往下查找的过程。
再看跳跃表的结构,如下图:
在这里插入图片描述
同样我们也是查找51这个元素,从第2层开始,查找到21,后面是null,然后到下一层。到了第1层的21,往下查找到41,41比51小,继续往下查找。查找到61,61比51大,回退到41,到第0层,第0层的41再往下找,正好是51。一共经历了4次查找的过程。

常用命令

zadd

将一个或多个member元素及其score值添加到有序集合key中

zadd <key> <score1> <value1> <score2> <value2>...

用法:
在这里插入图片描述

zrange

返回有序集中key中,下标在start和stop之间的元素。带着withscores,可以让分数一起和值返回到结果集。
用法:

zrange <key> <start> <stop> [withscores]

如下图:
在这里插入图片描述
返回value和score
在这里插入图片描述

zrangebyscore

返回有序集key中,所有score介于min和max之间(包括等于min和max的)的成员。
有序集成员按score值从小到大的次序排列显示。
用法:

zrangebyscore <key> <min> <max> [withscores]

如下图:
在这里插入图片描述

zrevrangebyscore

返回有序集key中,所有score介于max和min之间(包括等于max和min的)的成员。
有序集成员按score值从大到小的次序排列显示。
用法:

zrevrangebyscore <key> <max> <min> [withscores]

如下图:
在这里插入图片描述

zincrby

为集合key中元素的score加上增量
用法:

zincrby <key> <增量> <value>

如下图:
在这里插入图片描述

zrem

删除集合key中指定值的元素
用法:

zrem <key> <value>

如下图:
在这里插入图片描述

zcount

统计集合key中指定分数区间min到max中的成员数目。
用法:

zcount <key> <min> <max>

如下图:
在这里插入图片描述

zrank

返回元素值value在集合key中的排名(从0开始)。
用法:

zrank <key> <value>

如下图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值