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. 关于开发环境中的消息在download时没有下载下来时的问题

    业务场景:在开发环境改了一些代码,现在需要将这些代码(包括class和数据库对象)移植到开发环境,整理出了Objectlist(就是该模块定义了哪些数据库对象),然后上传到FTP服务器上时,再执行do ...

  2. 【C++】指针与引用的区别

    本文主要总结在C++中指针与引用的区别. 从定义与性质来看指针与引用有如下区别: 指针表示的是一块变量的地址 引用表示一个变量的别名. 因此指针变量需要占用空间(一个指针变量在32位系统下占用4字节, ...

  3. IDMC制造业ERP业务场景测试之一——硅钢片制造业务流程测试

    一.测试地址 硅钢片业务测试数据库地址为:http://www.bonawifi.com,测试数据库名字为SiliconSteelSheet,测试账号:用户名demo ,密码demo 二.业务说明 根 ...

  4. 《JavaScript程序设计》第2课:JS类型系统

    JS类型系统可以分为标准类型和对象类型,进一步标准类型又可以分为原始类型和引用类型,而对象类型又可以分为内置对象类型.普通对象类型.自定义对象类型. 1. 标准类型 标准类型共包括了6个分别是:und ...

  5. 让TextView里面的文字逐个显示的动画效果实现(1)

    最近使用TextView时想要实现里面的文字逐个显示的动画效果,就如同打字一样. 主要实现思想:新建一个TextView的派生类,先将要逐个显示的字符串保存变量 mOriginalStr 中,然后启动 ...

  6. XML查询

    XPath是XML的查询语言,其内容相当复杂.可以查阅www.w3.org/TR/xpath. 下面以一个实例简单了解一线XPath的查询方法: public partial class Form1 ...

  7. Python with

    简介 在编程中会经常碰到这种情况:有一个特殊的语句块,在执行这个语句块之前需要先执行一些准备动作:当语句块执行完成后,需要继续执行一些收尾动作.例如,文件读写后需要关闭,数据库读写完毕需要关闭连接,资 ...

  8. 前后端分离之vue2.0+webpack2 实战项目 -- webpack介绍

    webpack的一点介绍 Webpack 把任何一个文件都看成一个模块,模块间可以互相依赖(require or import),webpack 的功能是把相互依赖的文件打包在一起.webpack 本 ...

  9. MySQL一个简单的存储过程demo

    使用的工具是Navicat for MySQL. 首先创建一个学生表 mysql) ) ) auto_increment,age ) ) not null,primary key(s_no)); Qu ...

  10. 10个漂亮的jQuery日历插件下载【转载】

    10个漂亮的jQuery日历插件下载 2013-08-07 标签:jQuery日历插件jQuery日历jQuery插件   日期是非常重要的,随时随地.微薄或网站的日期选取器日历必须在那里.您可以使用 ...