相关文章redis
Redis 的命令详解 - Key 篇
Redis 的命令详解 - String 篇
Redis 的命令详解 - Hash 篇
Redis 的命令详解 - List 篇
Redis 的命令详解 - SET 篇算法
未完待续!!!数组
跟 SET 相关的命令一共有 25 种,这里只介绍经常使用的,其余请参考官网bash
起始版本 : 1.2.0
时间复杂度 : O(log(N)),其中N是有序集合中的元素数。架构
向有序集合(sorted set)中,添加 分数/成员(score/member)对,能够同时指定多个分数/成员(score/member)对。函数
分数值是一个带符号带双精度浮点型数字字符串。post
redis 版本 >= 2.4 时,ZADD
命令接受多个成员。 在Redis 2.4之前,ZADD
命令只能添加或者更新一个成员。ui
ZADD key [NX|XX] [CH] [INCR] score1 member1 [score2 member2 ...]
spa
score 是分数,放在前面 member 是成员code
redis 版本 >= Redis 3.0.2时, ZADD支持如下参数
ZINCRBY
命令,对成员的分数进行递增操做,在此模式下只能指定一对分数/成员。Redis 有序集合的分数使用双精度64位浮点数。咱们支持全部的架构,这表示为一个IEEE 754 floating point number,它能包括的整数范围是-(2^53) 到 +(2^53)。或者说是-9007199254740992 到 9007199254740992。更大的整数在内部用指数形式表示,因此,若是为分数设置一个很是大的整数,你获得的是一个近似的十进制数。
Sorted Set 按照分数递增的方式进行排序。且不容许存在重复的成员。
分数能够经过ZADD
命令进行更新,也能够经过ZINCRBY
命令来修改以前的值,分数变化后,对应的成员的排序位置也会随之改变。
获取一个成员当前的分数可使用ZSCORE
命令,也能够用它来验证成员是否存在。
有序集合里面的成员是不能重复的,可是不一样成员间有可能有相同的分数。当多个成员有相同的分数时,将进行字典排序(ordered lexicographically)。
字典顺序排序用的是二进制,它比较的是字符串的字节数组。
若是用户将全部元素设置相同分数(例如0),有序集合里面的全部元素将按照字典顺序进行排序,范围查询元素可使用ZRANGEBYLEX
命令
起始版本 : 1.2.0
时间复杂度 : O(1)
ZSCORE key member
成员的分数,成员不存在返回nil
起始版本 : 1.2.0
时间复杂度 : O(M*log(N)),其中N是有序集合中的元素数,M是要删除的元素数。
删除指定的成员key,不存在的成员将被忽略。
ZREM key member [member ...]
删除的成员数,不包括不存在的成员。
reids 版本 >= 2.4时,接受多个 member 参数
起始版本 : 1.2.0
时间复杂度 : O(M + log(N)),其中N是有序集合中的元素数,M是要删除的元素数。
删除分数在 min 和之间 max 之间的全部成员,包括min也包括max
ZREMRANGEBYSCORE key min max
删除的成员
起始版本 : 2.0.0
时间复杂度 : O(M + log(N)),其中N是有序集合中的元素数,M是要删除的元素数。
删除开始下标和结束下标之间的全部成员,下标从0开始,支持负下标,-1表示最右端成员,包括开始下标也包括结束下标
ZREMRANGEBYSCORE key start stop
删除的成员
起始版本 : 1.2.0
时间复杂度 : O(log(N)),其中N是有序集合中的元素数。
为有序集合中指定成员的分数加上一个带符号的双精度浮点数。
score值必须是字符串表示的整数值或双精度浮点数,而且能接受double精度的浮点数。也有可能给一个负数来减小score的值。
ZINCRBY key 带符号的双精度浮点数 member
起始版本 : 1.2.0
时间复杂度 : O(1)
ZCARD key
集合中成员的个数,若是key不存在,返回0
起始版本 : 2.0.0
时间复杂度 : O(log(N)),其中N是有序集合中的元素数。
返回有序集合中,分数介于 min 和 max 之间的成员数量。
ZCOUNT key min max
分数介于 min 和 max 之间的成员数量,若是key不存在,返回0
起始版本 : 2.8.9
时间复杂度 : O(log(N)),其中N是有序集合中的元素数。
返回有序集合中,介于 min 和 max 之间的成员数量。这里的 min 和 max 指的不是分数,而是成员。min 是分数小点的成员,max 是分数大点的成员,若是min成员的分数比max成员的分数还大,返回值为0
因为 Sorted Set 是有序集合(按分数从小到大排序),因此能够经过成员来搜索
ZLEXCOUNT key min max
介于 min 和 max 之间的成员数量,若是key不存在,返回0
ZLEXCOUNT
与 ZCOUNT
语法、做用、返回值都相同,区别在于
ZCOUNT
使用分数来圈定范围ZLEXCOUNT
使用成员来圈定范围(利用了 Sorted Set 是有序集合的性质)起始版本 : 5.0.0
时间复杂度 : O(log(N) * M),其中N是排序集中元素的数量,M是弹出元素的数量。
删除并返回有序集合中 count 个分数最高的成员
当 count > 1时,分数最高的将是第一个,其次是分数较低的元素。若是分数最高的有多个,按排列循序,从右到左,删除并返回(弹出)。
官方的解释繁琐且不精确,这里说一下个人解释。因为 Sorted Set 是按照分数进行从小到大排序的,分数相同的按照成员的字节数组排序。因此 ZPOPMAX 的做用至关于右端弹出。
ZPOPMAX key [count]
count 表示要弹出的个数
按照弹出循序的成员/分数对列表
起始版本 : 5.0.0
时间复杂度 : O(log(N) * M),其中N是排序集中元素的数量,M是弹出元素的数量。
左端弹出指定个数的成员/分数对
ZPOPMIN key [count]
count 表示要弹出的个数
按照弹出循序的成员/分数对列表
起始版本 : 5.0.0
时间复杂度 : O(log(N)),其中N为有序集合中元素的数量
BZPOPMAX
是 ZPOPMAX
命令的阻塞版,当有序集合中没有成员时,会阻塞,指定有新成员添加进来或超时。
除此以外,BZPOPMAX
还能够指定多个key,当指定多个key时,按照参数中key的顺序,弹出第一个非空集合中分数最大的成员
BZPOPMAX key1 [key2 ...] timeout
timeout 为超时时间,单位秒。设置为 0 表示无限超时
key名称、成员名称和分数,超时则返回 nil
起始版本 : 5.0.0
时间复杂度 : O(log(N)),其中N为有序集合中元素的数量
BZPOPMIN
是 ZPOPMIN
命令的阻塞版,当有序集合中没有成员时,会阻塞,指定有新成员添加进来或超时。
除此以外,BZPOPMIN
还能够指定多个key,当指定多个key时,按照参数中key的顺序,弹出第一个非空集合中分数最小的成员
BZPOPMIN key1 [key2 ...] timeout
timeout 为超时时间,单位秒。设置为 0 表示无限超时
key名称、成员名称和分数,超时则返回 nil
起始版本 : 2.0.0
时间复杂度 : O(N) + O(M log(M)),其中 N 是全部集合的成员数量之和,M 是结果集中元素的数量。
计算指定个数的给定有序集合的并集,并将结果存储在 destination 中。
必须提供 numkeys 参数,而且 numkeys 在 key 及其余可选参数以前
指定 WEIGHTS 参数,能够为每一个有序集合指定一个权重。这意味着,在将每一个有序集合中的成员分数传递给聚合函数以前,都要乘以该权重。若是 WEIGHTS 未指定,则权重默认为1。
指定 AGGREGATE 参数,能够指定如何合并并集的结果。默认使用 SUM 函数。当此选项设置为MIN或时MAX,结果集将选择最小或最大分数的成员。
ZUNIONSTORE destination numkeys key1 [key2 ...] [WEIGHTS weight1 [weight2 ...]] [AGGREGATE SUM | MIN | MAX]
结果集中元素的个数
起始版本 : 2.0.0
时间复杂度 : O(N) + O(M log(M)),其中 N 是全部集合的成员数量之和,M 是结果集中元素的数量。
计算指定个数的给定有序集合的交集,并将结果存储在 destination 中。
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM | MIN | MAX]
结果集中元素的个数
起始版本 : 2.0.0
时间复杂度 : O(log(N))
按分数从小到大获取成员在有序集合中的排名,排名从0开始(也就是分数最小的排名为0,分数第二小的,排名为1...)
ZRANK key member
成员对应的排名,若是key或成员不存在,返回nil
redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZRANK myzset "three"
(integer) 2
redis> ZRANK myzset "four"
(nil)
redis>
复制代码
起始版本 : 2.0.0
时间复杂度 : O(log(N))
按分数从大到小获取成员在有序集合中的排名,排名从0开始(也就是分数最大的排名为0,分数第二大的,排名为1...)
ZREVRANK key member
成员对应的排名,若是key或成员不存在,返回nil
起始版本 : 1.2.0
时间复杂度 : O(log(N) + M),N为有序集合中的元素数,M为返回的元素数。
返回开始下标和结束下标内的成员,并按照分数从小到大排序返回。
下标从0开始,支持负下标,-1表示最后一个成员,包括开始下标,也包括结束下标
因为 Sorted Set 是按分数从小到大排序,分数相同按成员字节数组排序,因此下标0表示最左边的成员,下表 -1 表示最右边的成员
下标超出范围不会产生错误。若是开始下标 > 集合最大下标或开始下标 > 结束下标,则结果为一个空列表。
若是结束下标 > 集合最大下标,则将结束下标视为集合的最大下标
ZRANGE key start stop [WITHSCORES]
指定范围内的成员列表,若是指定了 WITHSCORES 参数,还会包含成员对应的分数。
列表顺序按分数从小到大排序,分数相同按成员字节数组排序
起始版本 : 1.2.0
时间复杂度 : O(log(N) + M),N为有序集合中的元素数,M为返回的元素数。
返回开始下标和结束下标内的成员,并按照分数从大到小排序返回。
下标从0开始,支持负下标,-1表示最后一个成员,包括开始下标,也包括结束下标
因为 Sorted Set 是按分数从小到大排序,分数相同按成员字节数组排序,因此下标0表示最左边的成员,下表 -1 表示最右边的成员
下标超出范围不会产生错误。若是开始下标 > 集合最大下标或开始下标 > 结束下标,则结果为一个空列表。
若是结束下标 > 集合最大下标,则将结束下标视为集合的最大下标
ZREVRANGE 命令与 ZRANGE 命令惟一的不一样就是返回列表的顺序
ZREVRANGE key start stop [WITHSCORES]
指定范围内的成员列表,若是指定了 WITHSCORES 参数,还会包含成员对应的分数。
列表顺序按分数从大到小排序,分数相同按成员字节数组排序
起始版本 : 1.0.5
时间复杂度 : O(log(N) + M),N为有序集合中的元素数,M为返回的元素数。若是M为常数(例如,始终要求使用LIMIT=10),则能够将其视为O(log(N))
返回分数在 min 和 max 之间的成员,包括min 也包括 max
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
成员列表,设置 WITHSCORES 参数后,还会返回成员的对应分数
列表顺序按分数从小到大排序,分数相同按成员字节数组排序
起始版本 : 2.2.0
时间复杂度 : O(log(N) + M),N为有序集合中的元素数,M为返回的元素数。若是M为常数(例如,始终要求使用LIMIT=10),则能够将其视为O(log(N))
返回分数在 min 和 max 之间的成员,包括min 也包括 max
此命令与 ZRANGEBYSCORE
命令的惟一区别在于,返回结果的排序
ZRANGEBYSCORE
按分数从小到大排序,分数相同按成员字节数组排序ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
成员列表,设置 WITHSCORES 参数后,还会返回成员的对应分数
列表顺序按分数从大到小排序,分数相同按成员字节数组排序