Redis之ZSet类型的详解&ZSet类型中常用命令的实践
知识回顾:
通过对Redis中的String的命令做了充分的讲解以及实践学习
通过对Redis中String类型之Bit命令的详解以及Bit命令的实践进行了学习
通过对Redis中的Hash类型以及Hash中常用命令的实践学习
通过对Redis之List类型的详解&List类型中常用命令的实践的学习
通过对Redis之Set类型的详解&Set类型中常用命令的实践的学习
接下来的学习任务:
接下来我们要学习的内容是:Redis之ZSet类型的详解&ZSet类型中常用命令的实践。
Redis中String类型内容请看这里呦:
【Redis之String类型的详解&String类型中常用命令的实践】
Redis中String类型是Bit命令内容请看这里呦:
【Redis中String类型之Bit命令的详解&Bit命令的实践】
Redis之Hash类型的详解&Hash类型中常用命令的实践请看这里呦:
【Redis之Hash类型的详解&Hash类型中常用命令的实践】
Redis之List类型的详解&List类型中常用命令的实践请看这里呦:
【Redis之List类型的详解&List类型中常用命令的实践】
Redis之Set类型的详解&Set类型中常用命令的实践请看这里呦:
【Redis之Set类型的详解&Set类型中常用命令的实践】
Redis中Zset的介绍
有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
Redis中Zset的基本命令结构
zset的基本命令 唯一标识的key 集合中的元素(有序不重复)—>元素对应的是多个(分数/元素)对
Redis中Zset的常用命令
Redis中zset的常用命令 | 备注说明 |
---|---|
zadd | 向有序集合中添加一个或多个 分数/元素对 |
zscore | 获取有序集合中元素对应的分数 |
zrange | 获取集合中的元素,如果加上withscores则会连同分数一并返回 |
zrevrange | 和zrange类似,只是将结果倒序了 |
zcard | 返回集合中元素的个数 |
zcount | 统计集合中分数在min和max之间的元素个数 |
zrangebyscore | 可以根据score范围查找元素 |
zrank | 获取元素在集合中的排名,从小到大,最小的是0 |
zrevrank | 获取元素在集合中的排序,从大到小 |
zincrby | 给元素增加分数,如果不存在就新创建元素,并赋予对应的分数 |
zinterstore | 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中 |
zrem | 从集合中弹出一个元素 |
zlexcount | 计算有序集合中指定字典区间内成员数量 |
zrangebylex | 获取指定区间的元素,分数必须相同 |
zadd命令
向有序集合中添加一个或者多个元素(分数/元素),如果元素已经存在,则更新该元素的分数,并调整到对应的位置。按分数从小到大排列。
127.0.0.1:6379> zadd rank 100 liu 90 xue 80 zuo 70 huang
(integer) 4
127.0.0.1:6379>
zscore命令
获取有序集合中元素对应的分数值。
127.0.0.1:6379> zscore rank liu
"100"
127.0.0.1:6379> zscore rank xue
"90"
127.0.0.1:6379> zscore rank zuo
"80"
127.0.0.1:6379> zscore rank huang
"70"
127.0.0.1:6379>
zrange命令
获取集合中指定区间的元素信息。0是第一个元素,-1是最后一个元素,以此类推。
如果加上withscores参数则会连同分数一并返回。
结果按照每个对儿的分数升序排列返回。
127.0.0.1:6379> zrange rank 0 -1
1) "huang"
2) "zuo"
3) "xue"
4) "liu"
127.0.0.1:6379> zrange rank 0 -1 withscores
1) "huang"
2) "70"
3) "zuo"
4) "80"
5) "xue"
6) "90"
7) "liu"
8) "100"
127.0.0.1:6379>
zrevrange命令
获取集合中指定区间的元素信息。0是第一个元素,-1是最后一个元素,以此类推。
如果加上withscores参数则会连同分数一并返回。
结果按照每个对儿的分数降序排列返回。
127.0.0.1:6379> zrevrange rank 0 -1
1) "liu"
2) "xue"
3) "zuo"
4) "huang"
127.0.0.1:6379> zrevrange rank 0 -1 withsocres
(error) ERR syntax error
127.0.0.1:6379> zrevrange rank 0 -1 withscores
1) "liu"
2) "100"
3) "xue"
4) "90"
5) "zuo"
6) "80"
7) "huang"
8) "70"
127.0.0.1:6379>
zcard命令
返回集合中元素的个数。
127.0.0.1:6379> zcard rank
(integer) 4
127.0.0.1:6379> zrange rank 0 -1
1) "huang"
2) "zuo"
3) "xue"
4) "liu"
127.0.0.1:6379>
zcount命令
统计集合中元素的分数在min和max之间的个数,如果不需要保持min或者max。
包含的是min,max是俩个闭区间。
127.0.0.1:6379> zrange rank 0 -1 withscores
1) "huang"
2) "70"
3) "zuo"
4) "80"
5) "xue"
6) "90"
7) "liu"
8) "100"
127.0.0.1:6379> zcount rank 0 100
(integer) 4
127.0.0.1:6379> zcount rank 90 100
(integer) 2
127.0.0.1:6379>
zrangebyscore命令
可以根据score范围来查找集合中的元素。
加上withscores也可以一并查询出对应的分数。
127.0.0.1:6379> zrangebyscore rank 0 100
1) "huang"
2) "zuo"
3) "xue"
4) "liu"
127.0.0.1:6379> zrangebyscore rank 0 100 withscores
1) "huang"
2) "70"
3) "zuo"
4) "80"
5) "xue"
6) "90"
7) "liu"
8) "100"
127.0.0.1:6379>
zrank命令
获取元素在集合中的排名。
从小到大排序,最小的排名是0,下标从0开始。
不存在的返回 nil。
127.0.0.1:6379> zrank rank liu
(integer) 3
127.0.0.1:6379> zrank rank pan
(nil)
127.0.0.1:6379> zrank rank xue
(integer) 2
127.0.0.1:6379> zrank rank huang
(integer) 0
127.0.0.1:6379> zrank rank zuo
(integer) 1
127.0.0.1:6379>
zrevrank命令
获取元素在集合中的排名,和zrank命令刚好相反
从大到小排名,最小的排名是0,下标从0开始。
不存在的返回 nil。
127.0.0.1:6379> zrevrank rank liu
(integer) 0
127.0.0.1:6379> zrevrank rank huang
(integer) 3
127.0.0.1:6379> zrevrank rank zuo
(integer) 2
127.0.0.1:6379> zrevrank rank xue
(integer) 1
127.0.0.1:6379> zrevrank rank hai
(nil)
127.0.0.1:6379>
zincrby命令
如果集合中存在元素,直接给集合中的元素增加分数。
如果元素不存在则新建元素,并设置分数初始为0然后在增加设置的分数。
返回的值加了值后的结果。
127.0.0.1:6379> zrange rank 0 -1 withscores
1) "huang"
2) "70"
3) "zuo"
4) "80"
5) "xue"
6) "90"
7) "liu"
8) "100"
127.0.0.1:6379> zincrby rank 1 liu
"101"
127.0.0.1:6379> zincrby rank 1 xue
"91"
127.0.0.1:6379> zrange rank 0 -1 withscores
1) "huang"
2) "70"
3) "zuo"
4) "80"
5) "xue"
6) "91"
7) "liu"
8) "101"
127.0.0.1:6379> zincrby rank 80 temp
"80"
127.0.0.1:6379> zrange rank 0 -1 withscores
1) "huang"
2) "70"
3) "temp"
4) "80"
5) "zuo"
6) "80"
7) "xue"
8) "91"
9) "liu"
10) "101"
127.0.0.1:6379>
zinterstore命令
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中。
127.0.0.1:6379> zadd val 1 a 2 b 3 c 4 d 5 e
(integer) 5
127.0.0.1:6379> zadd val1 1 a 2 b 3 c 4 d 5 e
(integer) 5
127.0.0.1:6379> zinterstore val2 val val1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> zinterstore val2 2 val val1
(integer) 5
127.0.0.1:6379> zrange val2 0 -1 withscores
1) "a"
2) "2"
3) "b"
4) "4"
5) "c"
6) "6"
7) "d"
8) "8"
9) "e"
10) "10"
127.0.0.1:6379>
还可以在命令后跟上权重值,score会乘以该权重值。
127.0.0.1:6379> zinterstore val2 2 val val1 weights 2 2
(integer) 5
127.0.0.1:6379> zrange val2 0 -1 withscores
1) "a"
2) "4"
3) "b"
4) "8"
5) "c"
6) "12"
7) "d"
8) "16"
9) "e"
10) "20"
127.0.0.1:6379>
zrem命令
从集合中弹出一个元素
127.0.0.1:6379> zrange val2 0 -1 withscores
1) "a"
2) "4"
3) "b"
4) "8"
5) "c"
6) "12"
7) "d"
8) "16"
9) "e"
10) "20"
127.0.0.1:6379> zrem val2 a
(integer) 1
127.0.0.1:6379> zrange val2 0 -1 withscores
1) "b"
2) "8"
3) "c"
4) "12"
5) "d"
6) "16"
7) "e"
8) "20"
127.0.0.1:6379>
zlexcount命令
计算有序集合中指定字典区间内成员数量。
区间表示方法:
- +表示最小值和最大值。
如果我们需要通过元素查找的话需要加[
127.0.0.1:6379> zrange val2 0 -1 withscores
1) "b"
2) "8"
3) "c"
4) "12"
5) "d"
6) "16"
7) "e"
8) "20"
127.0.0.1:6379> zlexcount val2 - +
(integer) 4
127.0.0.1:6379> zlexcount val2 [a [e
(integer) 4
127.0.0.1:6379>
zrangebylex命令
获取集合中指定成员区间的元素。
区间表示方法:
- +表示最小值和最大值。
如果我们需要通过元素查找的话需要加[
127.0.0.1:6379> zrangebylex val2 - +
1) "b"
2) "c"
3) "d"
4) "e"
127.0.0.1:6379> zrangebylex val2 [a [e
1) "b"
2) "c"
3) "d"
4) "e"
127.0.0.1:6379>