redis 系列文章:
https://liudongdong.top/categ…
本篇起源:
https://liudongdong.top/archi…
公众号:雨中散步撒哈拉
备注:欢送关注公众号,一起学习,共同进步!
一、基本概念
Redis 有序汇合和汇合一样也是 string 类型元素的汇合, 且不容许反复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为汇合中的成员进行从小到大的排序。
有序汇合的成员是惟一的, 但分数 (score) 却能够反复。
汇合是通过哈希表实现的,所以增加,删除,查找的复杂度都是 O(1)。汇合中最大的成员数为 232 – 1 (4294967295, 每个汇合可存储 40 多亿个成员)。
实例:
127.0.0.1:6379> zadd zset 1 one 2 two 3 three 4 four 5 five
(integer) 5
127.0.0.1:6379> zrange zset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
127.0.0.1:6379>
二、命令分类
依据集体了解和便于学习,进行了简略分类!
分为以下几类:
- 新增成员
- 删除成员
- 查问成员
1. 新增成员
- zadd:新增成员
2. 删除成员
- zrem:依据指定 key 进行删除
- zremrangebylex:依据指定汇合区间进行删除
- zremrangebyrank:依据指定排名区间进行删除
- zremrangebyscore:依据分数区间进行删除
3. 查问成员
- zcard:查问汇合成员数量
- zcount:分数区间成员数量
- zlexcount:成员区间成员数量
- zscore:指定 key 和值,获取分数
- zrange:获取成员信息
- zrank:指定 key 和值,获取下标
- zrangebylex:指定汇合区间,获取列表
- zrangebyscore:指定分数区间,获取列表
- zrevrange:倒序展现列表
- zrevrangebyscore:依据分数区间,倒序展现列表
- zreverank:倒序获取成员下标
三、命令实际
1. 新增成员
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> zadd zset 1 one 2 two 3 three 4 four 5 five
(integer) 5
127.0.0.1:6379> zrange zset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
127.0.0.1:6379>
2. 删除成员
# 移除 zset 下的 one
127.0.0.1:6379> zrem zset one
(integer) 1
127.0.0.1:6379> zrange zset 0 -1
1) "two"
2) "three"
3) "four"
4) "five"
# 移除分数排名为 1 和 2 成员
127.0.0.1:6379> zremrangebyrank zset 1 2
(integer) 2
127.0.0.1:6379> zrange zset 0 -1
1) "two"
2) "five"
# 移除分数区间为[1,2]
127.0.0.1:6379> zrange zset 0 -1
1) "two"
2) "five"
127.0.0.1:6379> zremrangebyscore zset 1 2
(integer) 1
127.0.0.1:6379> zrange zset 0 -1
1) "five"
127.0.0.1:6379>
3. 查问成员
127.0.0.1:6379> zrange zset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
# 查问汇合数量
127.0.0.1:6379> zcard zset
(integer) 5
# 查问问题在 [0,5] 区间内的成员
127.0.0.1:6379> zcount zset 0 5
(integer) 5
# 依据汇合区间进行统计
127.0.0.1:6379> zlexcount zset - +
(integer) 5
# 依据 key 和 value 值,获取分数
127.0.0.1:6379> zscore zset four
"4"
# 获取所有汇合信息
127.0.0.1:6379> zrange zset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
127.0.0.1:6379> zrange zset 0 3
1) "one"
2) "two"
3) "three"
4) "four"
# 依据 key 和值获取下标
127.0.0.1:6379> zrank zset three
(integer) 2
# 依据汇合区间进行获取汇合成员
127.0.0.1:6379> zrangebylex zset - +
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
# 依据分数区间进行获取汇合列表
127.0.0.1:6379> zrangebyscore zset 0 4
1) "one"
2) "two"
3) "three"
4) "four"
# 倒序排列汇合
127.0.0.1:6379> zrevrange zset 0 -1
1) "five"
2) "four"
3) "three"
4) "two"
5) "one"
# 倒序排列依据分数区间
127.0.0.1:6379> zrevrangebyscore zset 5 2
1) "five"
2) "four"
3) "three"
4) "two"
# 倒序排列,依据 key 和 value,获取下标
127.0.0.1:6379> zrevrank zset three
(integer) 2
127.0.0.1:6379>
附录
下表列出了 redis 有序汇合的根本命令:
序号 | 命令及形容 |
---|---|
1 | ZADD key score1 member1 [score2 member2] 向有序汇合增加一个或多个成员,或者更新已存在成员的分数 |
2 | ZCARD key 获取有序汇合的成员数 |
3 | ZCOUNT key min max 计算在有序汇合中指定区间分数的成员数 |
4 | ZINCRBY key increment member 有序汇合中对指定成员的分数加上增量 increment |
5 | ZINTERSTORE destination numkeys key [key …] 计算给定的一个或多个有序集的交加并将后果集存储在新的有序汇合 destination 中 |
6 | ZLEXCOUNT key min max 在有序汇合中计算指定字典区间内成员数量 |
7 | ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序汇合指定区间内的成员 |
8 | ZRANGEBYLEX key min max [LIMIT offset count] 通过字典区间返回有序汇合的成员 |
9 | [ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]](https://www.runoob.com/redis/…) 通过分数返回有序汇合指定区间内的成员 |
10 | ZRANK key member 返回有序汇合中指定成员的索引 |
11 | ZREM key member [member …] 移除有序汇合中的一个或多个成员 |
12 | ZREMRANGEBYLEX key min max 移除有序汇合中给定的字典区间的所有成员 |
13 | ZREMRANGEBYRANK key start stop 移除有序汇合中给定的排名区间的所有成员 |
14 | ZREMRANGEBYSCORE key min max 移除有序汇合中给定的分数区间的所有成员 |
15 | ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到低 |
16 | ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分数区间内的成员,分数从高到低排序 |
17 | ZREVRANK key member 返回有序汇合中指定成员的排名,有序集成员按分数值递加 (从大到小) 排序 |
18 | ZSCORE key member 返回有序集中,成员的分数值 |
19 | ZUNIONSTORE destination numkeys key [key …] 计算给定的一个或多个有序集的并集,并存储在新的 key 中 |
20 | [ZSCAN key cursor [MATCH pattern] [COUNT count]](https://www.runoob.com/redis/…) 迭代有序汇合中的元素(包含元素成员和元素分值) |