概念:它是在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动按新的值调整顺序。可以理解为有两列的mysql表,一列存储value,一列存储顺序,操作中key理解为zset的名字。

  和set一样sorted,sets也是string类型元素的集合,不同的是每个元素都会关联一个double型的score。sorted set的实现是skip list和hash table的混合体。

  当元素被添加到集合中时,一个元素到score的映射被添加到hash table中,所以给定一个元素获取score的开销是O(1)。另一个score到元素的映射被添加的skip list,并按照score排序,所以就可以有序地获取集合中的元素。添加、删除操作开销都是O(logN)和skip list的开销一致,redis的skip list 实现是双向链表,这样就可以逆序从尾部去元素。sorted set最经常使用方式应该就是作为索引来使用,我们可以把要排序的字段作为score存储,对象的ID当元素存储。

常用命令:

1. zadd key score memeber [[score member] [score member]]:

  将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

  如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。

  score 值可以是整数值或双精度浮点数。

  如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。

  当 key 存在但不是有序集类型时,返回一个错误。

  返回值:被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。

2. zscore key member:返回有序集 key 中,成员 member 的 score 值。

3. zincrby key increment member:

  为有序集 key 的成员 member 的 score 值加上增量 increment 。

  可以通过传递一个负数值 increment ,让 score 减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。

  当 key 不存在,或 member 不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。

  当 key 不是有序集类型时,返回一个错误。

  score 值可以是整数值或双精度浮点数。

4. zcard key:返回有序集 key 的基数。

5. zcount key min max:返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。

6.zrange key start stop [WITHSCORES]:

  返回有序集 key 中,指定区间内的成员。

  其中成员的位置按 score 值递增(从小到大)来排序。

  具有相同 score 值的成员按字典序(lexicographical order )来排列。

7. zrevrange key start stop [WITHSCORES]:

  返回有序集 key 中,指定区间内的成员。

  其中成员的位置按 score 值递减(从大到小)来排列。 具有相同 score 值的成员按字典序的逆序(reverse lexicographical order)排列。

  除了成员按 score 值递减的次序排列这一点外, ZREVRANGE 命令的其他方面和 ZRANGE key start stop [WITHSCORES] 命令一样。

8. zrangebyscore key min max [WITHSCORES][LIMIT offset count]:

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

  具有相同 score 值的成员按字典序(lexicographical order)来排列(该属性是有序集提供的,不需要额外的计算)。

  可选的 LIMIT 参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count ),注意当 offset 很大时,

  定位 offset 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间。

  可选的 WITHSCORES 参数决定结果集是单单返回有序集的成员,还是将有序集成员及其 score 值一起返回。 该选项自 Redis 2.0 版本起可用。

9.zrevrangebyscore key min max [WITHSCORES][LIMIT offset count]:

  返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列。

  具有相同 score 值的成员按字典序的逆序(reverse lexicographical order )排列。

  除了成员按 score 值递减的次序排列这一点外, ZREVRANGEBYSCORE 命令的其他方面和 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

  命令一样。

10. zrank key member:

  返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。

  排名以 0 为底,也就是说, score 值最小的成员排名为 0 。

  使用 ZREVRANK key member 命令可以获得成员按 score 值递减(从大到小)排列的排名。

  返回值:如果 member 是有序集 key 的成员,返回 member 的排名。 如果 member 不是有序集 key 的成员,返回 nil 。

11. zrevrank key member:

  返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序。

  排名以 0 为底,也就是说, score 值最大的成员排名为 0 。

  使用 ZRANK key member 命令可以获得成员按 score 值递增(从小到大)排列的排名。

  如果 member 是有序集 key 的成员,返回 member 的排名。 如果 member 不是有序集 key 的成员,返回 nil 。

12. zrem key member [member...]:

  移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。

  当 key 存在但不是有序集类型时,返回一个错误。

  返回值:被成功移除的成员的数量,不包括被忽略的成员。

13. zremrangebyrank key start stop:

  移除有序集 key 中,指定排名(rank)区间内的所有成员。

  区间分别以下标参数 start 和 stop 指出,包含 start 和 stop 在内。

  下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。

  你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。

  返回值:被移除成员的数量

14. zremrangebyscore key min max:

  移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。

  自版本2.1.6开始, score 值等于 min 或 max 的成员也可以不包括在内,

  详情请参见 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 命令。

15. zrangebylex key min max [LIMIT offset count]:

  当有序集合的所有成员都具有相同的分值时, 有序集合的元素会根据成员的字典序(lexicographical ordering)来进行排序,

  而这个命令则可以返回给定的有序集合键 key 中, 值介于 min 和 max 之间的成员。

  如果有序集合里面的成员带有不同的分值, 那么命令返回的结果是未指定的(unspecified)。

16. zlexcount key min max:

  对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会返回该集合中, 成员介于 min 和 max 范围内的元素数量。

17. zremrangebylex key min max:对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会移除该集合中, 成员介于 min 和 max 范围内的所有元素。

应用场景:

  1.排行榜

    id 为 6001 的新闻点击数加 1:zincrby hotNews:20190926 1 n6001

    获取今天点击最多的 15 条:zrevrange hotNews:20190926 0 15 withscores

redis有序集合-zset的更多相关文章

  1. redis 有序集合(zset)函数

    redis 有序集合(zset)函数 zAdd 命令/方法/函数 Adds the specified member with a given score to the sorted set stor ...

  2. Redis有序集合Zset(sorted set)

    zadd/zrange 127.0.0.1:6379> zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5(integer) 5127.0.0.1:6379&g ...

  3. php使用redis的有序集合zset实现延迟队列

    延迟队列就是个带延迟功能的消息队列,相对于普通队列,它可以在指定时间消费掉消息. 延迟队列的应用场景: 1.新用户注册,10分钟后发送邮件或站内信. 2.用户下单后,30分钟未支付,订单自动作废. 我 ...

  4. 聊聊Mysql索引和redis跳表 ---redis的有序集合zset数据结构底层采用了跳表原理 时间复杂度O(logn)(阿里)

    redis使用跳表不用B+数的原因是:redis是内存数据库,而B+树纯粹是为了mysql这种IO数据库准备的.B+树的每个节点的数量都是一个mysql分区页的大小(阿里面试) 还有个几个姊妹篇:介绍 ...

  5. Redis对象——有序集合(ZSet)

    有序集合类型 (Sorted Set或ZSet) 相比于集合类型多了一个排序属性 score(分值),对于有序集合 ZSet 来说,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个是排序 ...

  6. 9、Redis五大数据类型---有序集合Zset(sorted set)

    一.简介 zset与set异同 相同之处: 都是没有重复元素的字符串集合 不同之处: 有序集合zset的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排 ...

  7. PHP+Redis 有序集合实现 24 小时排行榜实时更新

    基本介绍 Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个 double 类型的分数.redis 正是通过分数来为集合中的成员进行从 ...

  8. Redis 有序集合(sorted set)

    Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个double类型的分数.redis正是通过分数来为集合中的成员进行从小到大的排序. 有序 ...

  9. redist命令操作(三)--集合Set,有序集合ZSet

    1.Redis 集合(Set) 参考菜鸟教程:http://www.runoob.com/redis/redis-sets.html Redis 的 Set 是 String 类型的无序集合.集合成员 ...

随机推荐

  1. VMwarePro密钥

    VMware10Pro密钥 5F29M-48312-8ZDF9-A8A5K-2AM0Z VMware12Pro密钥 5A02H-AU243-TZJ49-GTC7K-3C61N VF5XA-FNDDJ- ...

  2. Burpsuite 工具详解(常用模块之proxy、spider 、decoder)

    Burpsuite常用模块之proxy.spider .decoder                                                 是一款集成化渗透测试工具(jav ...

  3. HDU3172 Virtual Friends

    基础并查集~ #include<cstdio> #include<algorithm> #include<cstring> #include<unordere ...

  4. Django rest framework框架中有哪些组件

    认证 权限(授权) 用户访问次数/频率限制 版本 解析器(parser) 序列化 分页 路由系统 视图 渲染器 认证 自定义认证的类 """ from rest_fram ...

  5. vue调试工具vue-devtools安装及使用方法

    vue调试工具vue-devtools安装及使用方法 https://www.jb51.net/article/150335.htm 本文主要介绍 vue的调试工具 vue-devtools 的安装和 ...

  6. ➡️➡️➡️IELTS Listening

    目录 src numbers and letters src https://ielts-simon.com/ielts-help-and-english-pr/ielts-listening/ nu ...

  7. C语言-错误处理

    标记程序的运行状态和控制主要有以下几种:break/continue/return/参数的返回值/exit(int n)_exit() atexit((*p)(参数列表)): 1 break:用在开关 ...

  8. Web性能测试工具推荐

    WEB性能测试工具主要分为三种: 一种是测试页面资源加载速度的: 一种是测试页面加载完毕后页面呈现.JS操作速度的: 一种是总体上对页面进行评价分析. ~~~如果谁有更好的工具也请一起分享下   1. ...

  9. vjudge Trailing Zeroes (III) (二分答案 && 数论)

    嗯... 题目链接:https://vjudge.net/contest/318956#problem/E 这道题是二分答案+数论,但首先是数论,否则你不知如何二分... 首先关于一个阶乘的结果最后会 ...

  10. C++11常用特性介绍——Lambda表达式

    一.C++11采用配对的方括号[]来创建一个匿名函数并执行,如: #include <iostream> int main() { auto func = []{ std::cout &l ...