Redis教程12-有序集合(sorted set)常用命令使用参考1
1.ZADD
ZADD key score member [[score member] [score member] ...]
将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。
score 值可以是整数值或双精度浮点数。
如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。
当 key 存在但不是有序集类型时,返回一个错误。
对有序集的更多介绍请参见 sorted set 。
在 Redis 2.4 版本以前, ZADD 每次只能添加一个元素。
可用版本:>= 1.2.0
时间复杂度:O(M*log(N)), N 是有序集的基数, M 为成功添加的新成员的数量。
返回值:被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。
127.0.0.1:6379> flushdb OK 127.0.0.1:6379> 127.0.0.1:6379> zadd names 10 tom // 添加一个元素 (integer) 1 127.0.0.1:6379> zadd names 5 jerry 3 zhangsan 7 lisi // 添加多个元素 (integer) 3 127.0.0.1:6379> zrange names 0 -1 1) "zhangsan" 2) "jerry" 3) "lisi" 4) "tom" 127.0.0.1:6379> zrange names 0 -1 withscores 1) "zhangsan" 2) "3" 3) "jerry" 4) "5" 5) "lisi" 6) "7" 7) "tom" 8) "10" 127.0.0.1:6379>
127.0.0.1:6379> zadd names 10 tom // 加已存在元素,且 score 值不变 (integer) 0 127.0.0.1:6379> zrange names 0 -1 withscores 1) "zhangsan" 2) "3" 3) "jerry" 4) "5" 5) "lisi" 6) "7" 7) "tom" 8) "10" 127.0.0.1:6379> zadd names 6 tom // 添加已存在元素,但是改变 score 值 (integer) 0 127.0.0.1:6379> zrange names 0 -1 withscores 1) "zhangsan" 2) "3" 3) "jerry" 4) "5" 5) "tom" // score变了 6) "6" 7) "lisi" 8) "7" 127.0.0.1:6379>
2.ZCARD
ZCARD key
返回有序集 key 的基数(集合中元素的数量)。
可用版本:>= 1.2.0
时间复杂度:O(1)
返回值:
127.0.0.1:6379> zadd names 5 tom 3 jerry 6 zhangsan 2 lisi (integer) 4 127.0.0.1:6379> zcard names (integer) 4 127.0.0.1:6379> exists ages // 对不存在的key进行zcard (integer) 0 127.0.0.1:6379> zcard ages (integer) 0 127.0.0.1:6379>
3.ZCOUNT
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 之间的成员的数量。
127.0.0.1:6379> zrange names 0 -1 withscores 1) "lisi" 2) "2" 3) "jerry" 4) "3" 5) "tom" 6) "5" 7) "zhangsan" 8) "6" 127.0.0.1:6379> zcount names 2 3 (integer) 2 127.0.0.1:6379> zcount names 7 10 (integer) 0 127.0.0.1:6379>
4.ZINCRBY
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 值,以字符串形式表示。
127.0.0.1:6379> zadd names 2 tom 5 jerry 1 zhangsan 3 lisi (integer) 4 127.0.0.1:6379> zrange names 0 -1 withscores 1) "zhangsan" 2) "1" 3) "tom" 4) "2" 5) "lisi" 6) "3" 7) "jerry" 8) "5" 127.0.0.1:6379> zincrby names 5 zhangsan // zhangsan的score+5 "6" 127.0.0.1:6379> zrange names 0 -1 withscores 1) "tom" 2) "2" 3) "lisi" 4) "3" 5) "jerry" 6) "5" 7) "zhangsan" 8) "6" 127.0.0.1:6379> zincrby names 1 wangwu // wangwu不存在, 相当于zadd "1" 127.0.0.1:6379> zrange names 0 -1 withscores 1) "wangwu" 2) "1" 3) "tom" 4) "2" 5) "lisi" 6) "3" 7) "jerry" 8) "5" 9) "zhangsan" 10) "6" 127.0.0.1:6379> zincrby names -1 jerry // 负数相当于减 "4" 127.0.0.1:6379> zrange names 0 -1 withscores 1) "wangwu" 2) "1" 3) "tom" 4) "2" 5) "lisi" 6) "3" 7) "jerry" 8) "4" 9) "zhangsan" 10) "6" 127.0.0.1:6379>
5.ZRANGE
ZRANGE key start stop [WITHSCORES]
返回有序集 key 中,指定区间内的成员。
其中成员的位置按 score 值递增(从小到大)来排序。
具有相同 score 值的成员按字典序(lexicographical order )来排列。
如果你需要成员按 score 值递减(从大到小)来排列,请使用 ZREVRANGE 命令
127.0.0.1:6379> zrange names 0 -1 // 显示整个有序集合 1) "zhangsan" 2) "wangwu" 3) "tom" 4) "lisi" 5) "jerry" 127.0.0.1:6379> zrange names 0 -1 withscores // 带着scores一起显示 1) "zhangsan" 2) "-8" 3) "wangwu" 4) "1" 5) "tom" 6) "2" 7) "lisi" 8) "3" 9) "jerry" 10) "4" 127.0.0.1:6379> zrange names 0 100 // end超过最大数, 测试 end 下标超出最大下标时的情况 1) "zhangsan" 2) "wangwu" 3) "tom" 4) "lisi" 5) "jerry" 127.0.0.1:6379> zrange names 100 1000 // start超过最大数, 测试当给定区间不存在于有序集时的情况 (empty list or set) 127.0.0.1:6379>