1.ZADD key score member [[score member] [score member] ...]

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

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

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

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

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

在 Redis 2.4 版本以前, ZADD 每次只能添加一个元素。

可用版本:
>= 1.2.0
时间复杂度:
O(M*log(N)), N 是有序集的基数, M 为成功添加的新成员的数量。
返回值:
被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。
# 添加单个元素

redis> ZADD page_rank  google.com
(integer) # 添加多个元素 redis> ZADD page_rank baidu.com bing.com
(integer) redis> ZRANGE page_rank - WITHSCORES
) "bing.com"
) ""
) "baidu.com"
) ""
) "google.com"
) "" # 添加已存在元素,且 score 值不变 redis> ZADD page_rank google.com
(integer) redis> ZRANGE page_rank - WITHSCORES # 没有改变
) "bing.com"
) ""
) "baidu.com"
) ""
) "google.com"
) "" # 添加已存在元素,但是改变 score 值 redis> ZADD page_rank bing.com
(integer) redis> ZRANGE page_rank - WITHSCORES # bing.com 元素的 score 值被改变
) "bing.com"
) ""
) "baidu.com"
) ""
) "google.com"
) ""

2.ZCARD key

返回有序集 key 的基数。

可用版本:
>= 1.2.0
时间复杂度:
O(1)
返回值:
当 key 存在且是有序集类型时,返回有序集的基数。
当 key 不存在时,返回 0 。
 
 

3.ZCOUNT key min max

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

关于参数 min 和 max 的详细使用方法,请参考 ZRANGEBYSCORE 命令。

可用版本:
>= 2.0.0
时间复杂度:
O(log(N)+M), N 为有序集的基数, M 为值在 min 和 max 之间的元素的数量。
返回值:
score 值在 min 和 max 之间的成员的数量。

4.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 值可以是整数值或双精度浮点数。

可用版本:
>= 1.2.0
时间复杂度:
O(log(N))
返回值:
member 成员的新 score 值,以字符串形式表示。

5.ZRANGE key start stop [WITHSCORES]

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

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

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

如果你需要成员按 score 值递减(从大到小)来排列,请使用 ZREVRANGE 命令。

下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。
超出范围的下标并不会引起错误。
比如说,当 start 的值比有序集的最大下标还要大,或是 start > stop 时, ZRANGE 命令只是简单地返回一个空列表。
另一方面,假如 stop 参数的值比有序集的最大下标还要大,那么 Redis 将 stop 当作最大下标来处理。
可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回,返回列表以 value1,score1, ..., valueN,scoreN 的格式表示。
客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。
可用版本:
>= 1.2.0
时间复杂度:
O(log(N)+M), N 为有序集的基数,而 M 为结果集的基数。
返回值:
指定区间内,带有 score 值(可选)的有序集成员的列表。
redis > ZRANGE salary  - WITHSCORES             # 显示整个有序集成员
) "jack"
) ""
) "tom"
) ""
) "boss"
) "" redis > ZRANGE salary WITHSCORES # 显示有序集下标区间 至 的成员
) "tom"
) ""
) "boss"
) "" redis > ZRANGE salary WITHSCORES # 测试 end 下标超出最大下标时的情况
) "jack"
) ""
) "tom"
) ""
) "boss"
) "" redis > ZRANGE salary WITHSCORES # 测试当给定区间不存在于有序集时的情况
(empty list or set)

6.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 版本起可用。

区间及无限

min 和 max 可以是 -inf 和 +inf ,这样一来,你就可以在不知道有序集的最低和最高 score 值的情况下,使用 ZRANGEBYSCORE 这类命令。

默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。

举个例子:

ZRANGEBYSCORE zset (1 5

返回所有符合条件 1 < score <= 5 的成员,而

ZRANGEBYSCORE zset (5 (10

则返回所有符合条件 5 < score < 10 的成员。

可用版本:
>= 1.0.5
时间复杂度:
O(log(N)+M), N 为有序集的基数, M 为被结果集的基数。
返回值:
指定区间内,带有 score 值(可选)的有序集成员的列表。
redis> ZADD salary  jack                        # 测试数据
(integer)
redis> ZADD salary tom
(integer)
redis> ZADD salary peter
(integer) redis> ZRANGEBYSCORE salary -inf +inf # 显示整个有序集
) "jack"
) "tom"
) "peter" redis> ZRANGEBYSCORE salary -inf +inf WITHSCORES # 显示整个有序集及成员的 score 值
) "jack"
) ""
) "tom"
) ""
) "peter"
) "" redis> ZRANGEBYSCORE salary -inf WITHSCORES # 显示工资 <= 的所有成员
) "jack"
) ""
) "tom"
) "" redis> ZRANGEBYSCORE salary ( # 显示工资大于 小于等于 的成员
) "peter"

7.ZRANK key member

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

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

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

可用版本:
>= 2.0.0
时间复杂度:
O(log(N))
返回值:
如果 member 是有序集 key 的成员,返回 member 的排名。
如果 member 不是有序集 key 的成员,返回 nil 。
redis> ZRANGE salary  - WITHSCORES        # 显示所有成员及其 score 值
) "peter"
) ""
) "tom"
) ""
) "jack"
) "" redis> ZRANK salary tom # 显示 tom 的薪水排名,第二
(integer)

8.ZREM key member [member ...]

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

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

在 Redis 2.4 版本以前, ZREM 每次只能删除一个元素。

可用版本:
>= 1.2.0
时间复杂度:
O(M*log(N)), N 为有序集的基数, M 为被成功移除的成员的数量。
返回值:
被成功移除的成员的数量,不包括被忽略的成员。

9.ZREMRANGEBYRANK key start stop

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

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

下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。
可用版本:
>= 2.0.0
时间复杂度:
O(log(N)+M), N 为有序集的基数,而 M 为被移除成员的数量。
返回值:
被移除成员的数量。
redis> ZADD salary  jack
(integer)
redis> ZADD salary tom
(integer)
redis> ZADD salary peter
(integer) redis> ZREMRANGEBYRANK salary # 移除下标 至 区间内的成员
(integer) redis> ZRANGE salary - WITHSCORES # 有序集只剩下一个成员
) "tom"
) ""

10.ZREMRANGEBYSCORE key min max

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

自版本2.1.6开始, score 值等于 min 或 max 的成员也可以不包括在内,详情请参见 ZRANGEBYSCORE 命令。

可用版本:
>= 1.2.0
时间复杂度:
O(log(N)+M), N 为有序集的基数,而 M 为被移除成员的数量。
返回值:
被移除成员的数量。

ZREVRANGE key start stop [WITHSCORES]

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

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

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

可用版本:
>= 1.2.0
时间复杂度:
O(log(N)+M), N 为有序集的基数,而 M 为结果集的基数。
返回值:
指定区间内,带有 score 值(可选)的有序集成员的列表。

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

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

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

除了成员按 score 值递减的次序排列这一点外, ZREVRANGEBYSCORE 命令的其他方面和 ZRANGEBYSCORE 命令一样。

可用版本:
>= 2.2.0
时间复杂度:
O(log(N)+M), N 为有序集的基数, M 为结果集的基数。
返回值:
指定区间内,带有 score 值(可选)的有序集成员的列表。

11.ZREVRANK key member

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

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

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

可用版本:
>= 2.0.0
时间复杂度:
O(log(N))
返回值:
如果 member 是有序集 key 的成员,返回 member 的排名。
如果 member 不是有序集 key 的成员,返回 nil 。
 
 

12.ZSCORE key member

返回有序集 key 中,成员 member 的 score 值。

如果 member 元素不是有序集 key 的成员,或 key 不存在,返回 nil 。

可用版本:
>= 1.2.0
时间复杂度:
O(1)
返回值:
member 成员的 score 值,以字符串形式表示。

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

计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。

默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之 和 。

WEIGHTS

使用 WEIGHTS 选项,你可以为 每个 给定有序集 分别 指定一个乘法因子(multiplication factor),每个给定有序集的所有成员的 score值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。

如果没有指定 WEIGHTS 选项,乘法因子默认设置为 1 。

AGGREGATE

使用 AGGREGATE 选项,你可以指定并集的结果集的聚合方式。

默认使用的参数 SUM ,可以将所有集合中某个成员的 score 值之 和 作为结果集中该成员的 score 值;使用参数 MIN ,可以将所有集合中某个成员的 最小 score 值作为结果集中该成员的 score 值;而参数 MAX 则是将所有集合中某个成员的 最大 score 值作为结果集中该成员的 score 值。

可用版本:
>= 2.0.0
时间复杂度:
O(N)+O(M log(M)), N 为给定有序集基数的总和, M 为结果集的基数。
返回值:
保存到 destination 的结果集的基数。
redis> ZRANGE programmer  - WITHSCORES
) "peter"
) ""
) "jack"
) ""
) "tom"
) "" redis> ZRANGE manager - WITHSCORES
) "herry"
) ""
) "mary"
) ""
) "bob"
) "" redis> ZUNIONSTORE salary programmer manager WEIGHTS # 公司决定加薪。。。除了程序员。。。
(integer) redis> ZRANGE salary - WITHSCORES
) "peter"
) ""
) "jack"
) ""
) "tom"
) ""
) "herry"
) ""
) "mary"
) ""
) "bob"
) ""

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

计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。

默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和.

关于 WEIGHTS 和 AGGREGATE 选项的描述,参见 ZUNIONSTORE 命令。

可用版本:
>= 2.0.0
时间复杂度:
O(N*K)+O(M*log(M)), N 为给定 key 中基数最小的有序集, K 为给定有序集的数量, M 为结果集的基数。
返回值:
保存到 destination 的结果集的基数。
redis > ZADD mid_test  "Li Lei"
(integer)
redis > ZADD mid_test "Han Meimei"
(integer)
redis > ZADD mid_test 99.5 "Tom"
(integer) redis > ZADD fin_test "Li Lei"
(integer)
redis > ZADD fin_test "Han Meimei"
(integer)
redis > ZADD fin_test 99.5 "Tom"
(integer) redis > ZINTERSTORE sum_point mid_test fin_test
(integer) redis > ZRANGE sum_point - WITHSCORES # 显示有序集内所有成员及其 score 值
) "Han Meimei"
) ""
) "Li Lei"
) ""
) "Tom"
) ""
 

Redis常用操作--------SortedSet(有序集合)的更多相关文章

  1. lunix下的redis数据库操作——zset有序集合

    创建:(有序集合存在一个权重的概念) zadd zset 1 a 2 b 3 c 4 d 5 e 6 f 7 g # 输出: # 1) "a" # 2) "b" ...

  2. Redis常用操作-------Set(集合)

    1.SADD key member [member ...] 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略. 假如 key 不存在,则创建一个 ...

  3. redis:order set有序集合类型的操作(有序集合)

    1. order set有序集合类型的操作(有序集合) 有序集合是在无序集合的基础上加了一个排序的依据,这个排序依据叫score,因此声明一个集合为有序集合的时候要加上score(作为排序的依据) 1 ...

  4. redis 学习(7) -- 有序集合

    redis 学习(7) -- 有序集合 zset 结构 有序集合:有序.不能包含重复元素 每个节点包含:score和value两个属性,根据score进行排序 如图: zset 重要 API 含义 命 ...

  5. python对redis的常用操作 下 (无序集合,有序集合)

    无序集合: 首先介绍增加,删除和获得所有元素的方法.我将会用第二部分来讨论集合的特殊操作: In [136]: x.sadd("challenge", 1,2,3,4,5,6,7, ...

  6. C#操作Redis SortedSet 有序集合

    /// <summary> /// Redis 有序集合 /// </summary> public static void Redis_SetSorted() { Redis ...

  7. Redis学习---Redis操作之有序集合

    有序集合,在集合的基础上,为每元素排序:元素的排序需要根据另外一个值来进行比较,所以,对于有序集合,每一个元素有两个值,即:值和分数,分数专门用来做排序. zadd(name, *args, **kw ...

  8. 15天玩转redis —— 第六篇 有序集合类型

    今天我们说一下Redis中最后一个数据类型 “有序集合类型”,回首之前学过的几个数据结构,不知道你会不会由衷感叹,开源的世界真好,写这 些代码的好心人真的要一生平安哈,不管我们想没想的到的东西,在这个 ...

  9. SortedSet有序集合类型

    SortedSet相当于C#中的SortDictionary类型,表示一个有序集合. 常用操作有,zadd命令将一个或多个元素及其score值加入到有序集key中. zrange命令返回有序集key中 ...

随机推荐

  1. [HDFS_add_1] HDFS 启动过程分析

    0. 说明 HDFS 文件概念 && HDFS 启动过程分析 1. HDFS 文件概念 [1.1 NameNode 职能] 存储文件类型.大小.权限.路径等等元数据 通过 edits( ...

  2. VMware导入OVF时报错(未能部署OVF包用户取消了任务的解决办法)

    阅读目录: 1.问题 2.原因 3.解决方案 问题:部署OVF模版的时候报错“用户取消了任务” 原因:导出ovf模板时,虚拟CD-ROM的选项要选[客户端设备],否则导入时报错“用户取消了任务” 解决 ...

  3. ccf--20150303--节日

    本题思路:首先,计算a月1日是星期几,然后再通过b和c得出日期monday,最后判断monday是否合法. 题目与代码如下: 问题描述 试题编号: 201503-3 试题名称: 节日 时间限制: 1. ...

  4. Tomcat 下配置一个ip绑定多个域名

    原文:http://pkblog.blog.sohu.com/68921246.html 在网上找了半天也没找到相关的资料,都说的太含糊.本人对tomcat下配置 一ip对多域名的方法详细如下,按下面 ...

  5. 零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)

    好,现在进入高阶代码篇. 目的: 爬取昆明市中学的兴趣点POI. 关键词:中学 已有ak:9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 昆明市坐标范围: 左下角:24.390894 ...

  6. c++11の的左值、右值以及move,foward

    左值和右值的定义 在C++中,可以放到赋值操作符=左边的是左值,可以放到赋值操作符右边的是右值.有些变量既可以当左值又可以当右值.进一步来讲,左值为Lvalue,其实L代表Location,表示在内存 ...

  7. (14)Python类

  8. MetaMask/metamask-extension/mascara 的运行实现

    https://github.com/MetaMask/metamask-extension/tree/develop/mascara 找了很多个实例,基本上很少是不使用线上钱包的,只有metamas ...

  9. MP实战系列(六)之代码生成器讲解

    MP的代码生成器可谓用"简洁"二字,来形容. 我个人觉得jeesite的代码生成器都不一定比它好用.当然也是由于我个人的习惯. 只需一键执行main方法,就可以生成对应的项目文件, ...

  10. 个人css编写规范

    前言:最近在做微信小程序,因为公司小,就我一个人弄前端的东西,js和页面都是我来弄,结果那天后台的人看到我的js代码,说我的代码写得不规范,函数什么的都很乱,弄得我羞愧难当,幸亏没看我的css,其实我 ...