Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中。它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行的排序。尽管Sorted-Sets中的成员必须是唯一的,但是分数(score)却是可以重复的。在Sorted-Set中添加、删除或更新一个成员都是非常快速的操作,其时间复杂度为集合中成员数量的对数。由于Sorted-Sets中的成员在集合中的位置是有序的,因此,即便是访问位于集合中部的成员也仍然是非常高效的。

常用命令

命令

时间复杂度

描述

返回值

ZADD key score member

[[score member] ...]

O(M*log(N)),N 是基数,M为新成员的数量。

将一个或多个member元素及其score值加入到有序集key当中.如果member已经是有序集的成员,那么更新这个member的 score值,并通过重新插入这个member元素,来保证该member 在正确的位置上.score值可以是整数值或双精度浮点数.如果 key不存在,则创建一个空的有序集并执行ZADD操作.当key存在但不是有序集类型时,返回一个错误.

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

ZCARD

O(1)

当key存在且是有序集类型时,返回有序集的基数.当key不存在时,返回0 。

ZCOUNT key min max

O(log(N)),N为有序集的基数。

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

ZINCRBY key increment member

O(log(N))

为有序集key的成员member的score值加上增量increment.可以通过传递一个负数值increment ,让score减去相应的值,比如 ZINCRBY key -5 member.当key不存在,或membe不是key的成员时,INCRBY key increment member等同于 ZADD key increment member.当key不是有序集类型时,返回一个错误.

member 成员的新score 值,以字符串形式表示.

ZRANGE key start stop [WITHSCORES]

O(log(N)+M),为有序集的基数,M为结果集的基数。

返回有序集key中,指定区间内的成员(按score值递增排序).相同score值的成员按字典序来排列.如果需要按score值递减来排列,使用 ZREVRANGE 命令.下标参数start和stop都以0为底.可以使用负数下标,-1表示最后一个成员,-2表示倒数第二个成员.超出范围的下标并不会引起错误。比如说,当start的值比有序集的最大下标还要大,或是start > stop时,ZRANGE命令只是简单地返回一个空列表;假如stop参数的值比有序集的最大下标还要大,将stop当作最大下标来处理。WITHSCORES选项让成员和它的 score值一并返回,返回列表以 value1,score1, ..., valueN,scoreN 的格式表示。

指定区间内,带有 score 值(可选)的有序集成员的列表。

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

O(log(N)+M),N 为有序集的基数,M 为被结果集的基数。

返回有序集key中,所有score值介min和max之间(包括等于 mi或max )的成员。有序集成员按score值递增次序排列,具有相同 score 值的成员按字典序来排列.可选的 LIMIT 参数指定返回结果的数量及区间.注意当offset很大时,定位offset的操作可能需要遍历整个有序集,此过程最坏复杂度O(N)时间。min和max可以是-inf和+inf .默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。

指定区间内,带有 score 值(可选)的有序集成员的列表。

ZRANK key member

O(log(N))

返回有序集key中成员member的排名.其中有序集成员按score值递增顺序排列.排名以0为底。使用 ZREVRANK 命令可以获得成员按score值递减排列的排名。

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

ZREM key [member ...]

O(M*log(N)),N为基数,M为被成功数量。

移除有序集key中的一个或多个成员,不存在的成员将被忽略。当key存在但不是有序集类型时,返回一个错误。

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

ZREMRANGEBYRANK key start stop

O(log(N)+M),N 为基数,而M 为被移除数量。

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

区间分别以下标参数start和stop指出,包含start和 stop在内。可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员。

被移除成员的数量。

ZREMRANGEBYSCORE key min max

O(log(N)+M),N为数,而M为被移除数量。

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

被移除成员的数量。

ZSCORE key member

O(1)

返回有序集key中,成员member的score值。如果 member不存在,或key不存在,返回nil 。

成员的score 值

UNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

O(N)+O(M log(M)), N 为给定有序集基数的总和, M 为结果集的基数。

计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。默认情况下,结果集中某个成员的 score值是所有给定集下该成员 score值之和。使用 WEIGHTS 选项,可以为每个给定有序集分别指定一个乘法因子(multiplication factor),每个给定有序集的所有成员的 score 值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。乘法因子默认设置为 1 。使用 AGGREGATE 选项,你可以指定并集的结果集的聚合方式。默认使用的参数SUM ,可以将score 值之和作为结果集中该成员的score值;使用参数MIN,将最小score值作为结果集中该成员的score值;而参数MAX则是将最大score值作为结果集中该成员的 score 值。

保存到 destination 的结果集的基数。

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和.

保存到 destination 的结果集的基数。

ZLEXCOUNT key min max

O(log(N)),N为有序集合包含的元素数量。

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

ZREMRANGEBYLEX key min max

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

ZRANGEBYLEX key min max [LIMIT offset count]

当有序集合的所有成员都具有相同的分值时,有序集合的元素会根据成员的字典序来进行排序,而这个命令则可以返回给定的有序集合键 key中,值介于min和max 之间的成员.如果有序集合里面的成员带有不同的分值, 那么命令返回的结果是未指定的(unspecified)。命令会使用 C 语言的 memcmp() 函数,对集合中的每个成员进行逐个字节的对比(byte-by-byte compare), 并按照从低到高的顺序, 返回排序后的集合成员。 如果两个字符串有一部分内容是相同的话, 那么命令会认为较长的字符串比较短的字符串要大。

应用范围

  • 可以用于一个大型在线游戏的积分排行榜。每当玩家的分数发生变化时,可以执行ZADD命令更新玩家的分数,此后再通过ZRANGE命令获取积分TOP TEN的用户信息。当然我们也可以利用ZRANK命令通过username来获取玩家的排行信息。最后我们将组合使用ZRANGE和ZRANK命令快速的获取和某个玩家积分相近的其他用户的信息。
  • Sorted-Sets类型还可用于构建索引数据。

Redis学习-SortedSet的更多相关文章

  1. Redis学习笔记(二)Redis支持的5种数据类型的总结之String和Hash

    引言 在Redis学习笔记(一)中我们已经会安装并且简单使用Redis了,接下来我们一起来学习下Redis支持的5大数据类型. 简介 Redis是REmote DIctionary Server(远程 ...

  2. Redis 学习手册

    一:Redis的简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,和Memcached类似,它支持存储的value类型相对更多,包 ...

  3. Redis学习笔记(二) Redis 数据类型

    Redis 支持五种数据类型:string(字符串).list(列表).hash(哈希).set(集合)和 zset(有序集合),接下来我们讲解分别讲解一下这五种类型的的使用. String(字符串) ...

  4. redis学习(一)

    Redis学习内容: 1. 概念 2. 下载安装R 3. 命令操作 1. 数据结构 4. 持久化操作 5. 使用Java客户端操作redis 1. 概念: redis是一款高性能的NOSQL系列的非关 ...

  5. redis 学习导航

    一.redis学习流程 二.redis官方网址: 官方网址:https://redis.io/ 三.redis简介 1. redis是一个基于内存,单线程的key-value的非关系型数据库,整个数据 ...

  6. Redis学习手册(目录)

    为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三.其一,Redis不仅性能高效,而且完全免费.其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧.最后 ...

  7. redis 学习笔记(6)-cluster集群搭建

    上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...

  8. Redis——学习之路四(初识主从配置)

    首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...

  9. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息.     ...

随机推荐

  1. 自适应的tab菜单栏

    代码部分: Css代码:*{ margin:0px; padding:0px; font-size:62.5%;}body{ background-color:#FFFFFF;}.zw-test-ti ...

  2. [.net 面向对象程序设计深入](9).NET Core 跨平台开发环境搭建

    [.net 面向对象程序设计深入](9).NET Core 跨平台开发环境搭建 1.概述 读前必备:认识.NET Core 上篇介绍了.NET 新的生态环境:包括.NET Framework..NET ...

  3. JS调用WebService,发布到IIS,网页提示WebService未定义[已解决]

    VS2013中,JS调用WebService,一直运行正常.部署到WindowsServer2008之后,在网页中访问,始终提示网页中有错误,点开之后发现是WebService未定义. 于是上网查解决 ...

  4. java随机数生成的原理

    一.在j2se里我们可以使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,我们可以把他乘以一定的数,比如说乘以100,他就是个100以内的随机,这个在 ...

  5. python之pymysql模块学习(待完善...)

    pymysql介绍 pymysql是在python3.x版本中用于连接mysql服务器的一个库.python2中则使用mysqldb. 安装方法: pip install pymysql 使用实例: ...

  6. 使用关系型数据库作为Redis落地的思路

    Redis的持久化方式主要有2种:RDB和AOF,但各有不足,同时Redis没有SQL支持,Redis本身提供的命令不足以实现大多数SQL查询需求,对后期运营的分析需求支撑不足.此外,对于游戏来说,活 ...

  7. 性能调优:mysql之left join

    poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...

  8. MySQL flashback 功能

    1. 简介 mysqlbinlog flashback(闪回)用于快速恢复由于误操作丢失的数据.在DBA误操作时,可以把数据库恢复到以前某个时间点(或者说某个binlog的某个pos).比如忘了带wh ...

  9. TypeScript入门-函数

    ▓▓▓▓▓▓ 大致介绍 TypeScript为JavaScript函数添加了额外的功能,让我们可以更容易地使用.TypeScript中的函数也包括JavaScript中最常见的两种函数 functio ...

  10. 设计模式总结(Java)—— 适配器模式

    适配器模式中引入了一个被称为适配器(Adapter)的包装类,而它所包装的对象称为适配者(Adaptee),即被适配的类.适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用.也就是说:当客户 ...