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) 5127.0.0.1:6379> zrange zset 0 -11) "one"2) "two"3) "three"4) "four"5) "five"127.0.0.1:6379>

二、命令分类

依据集体了解和便于学习,进行了简略分类!
分为以下几类:

  1. 新增成员
  2. 删除成员
  3. 查问成员

1. 新增成员

  1. zadd:新增成员

2. 删除成员

  1. zrem:依据指定key进行删除
  2. zremrangebylex:依据指定汇合区间进行删除
  3. zremrangebyrank:依据指定排名区间进行删除
  4. zremrangebyscore:依据分数区间进行删除

3. 查问成员

  1. zcard:查问汇合成员数量
  2. zcount:分数区间成员数量
  3. zlexcount:成员区间成员数量
  4. zscore:指定key和值,获取分数
  5. zrange:获取成员信息
  6. zrank:指定key和值,获取下标
  7. zrangebylex:指定汇合区间,获取列表
  8. zrangebyscore:指定分数区间,获取列表
  9. zrevrange:倒序展现列表
  10. zrevrangebyscore:依据分数区间,倒序展现列表
  11. 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) 5127.0.0.1:6379> zrange zset 0 -11) "one"2) "two"3) "three"4) "four"5) "five"127.0.0.1:6379>

2. 删除成员

# 移除zset下的one127.0.0.1:6379> zrem zset one(integer) 1127.0.0.1:6379> zrange zset 0 -11) "two"2) "three"3) "four"4) "five"# 移除分数排名为1和2成员127.0.0.1:6379> zremrangebyrank zset 1 2(integer) 2127.0.0.1:6379> zrange zset 0 -11) "two"2) "five"# 移除分数区间为[1,2]127.0.0.1:6379> zrange zset 0 -11) "two"2) "five"127.0.0.1:6379> zremrangebyscore zset 1 2(integer) 1127.0.0.1:6379> zrange zset 0 -11) "five"127.0.0.1:6379> 

3. 查问成员

127.0.0.1:6379> zrange zset 0 -11) "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 -11) "one"2) "two"3) "three"4) "four"5) "five"127.0.0.1:6379> zrange zset 0 31) "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 41) "one"2) "two"3) "three"4) "four"# 倒序排列汇合127.0.0.1:6379> zrevrange zset 0 -11) "five"2) "four"3) "three"4) "two"5) "one"# 倒序排列依据分数区间127.0.0.1:6379> zrevrangebyscore zset 5 21) "five"2) "four"3) "three"4) "two"# 倒序排列,依据key和value,获取下标127.0.0.1:6379> zrevrank zset three(integer) 2127.0.0.1:6379>

附录

下表列出了 redis 有序汇合的根本命令:

序号命令及形容
1ZADD key score1 member1 [score2 member2] 向有序汇合增加一个或多个成员,或者更新已存在成员的分数
2ZCARD key 获取有序汇合的成员数
3ZCOUNT key min max 计算在有序汇合中指定区间分数的成员数
4ZINCRBY key increment member 有序汇合中对指定成员的分数加上增量 increment
5ZINTERSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的交加并将后果集存储在新的有序汇合 destination 中
6ZLEXCOUNT key min max 在有序汇合中计算指定字典区间内成员数量
7ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序汇合指定区间内的成员
8ZRANGEBYLEX key min max [LIMIT offset count] 通过字典区间返回有序汇合的成员
9[ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]](https://www.runoob.com/redis/...) 通过分数返回有序汇合指定区间内的成员
10ZRANK key member 返回有序汇合中指定成员的索引
11ZREM key member [member ...] 移除有序汇合中的一个或多个成员
12ZREMRANGEBYLEX key min max 移除有序汇合中给定的字典区间的所有成员
13ZREMRANGEBYRANK key start stop 移除有序汇合中给定的排名区间的所有成员
14ZREMRANGEBYSCORE key min max 移除有序汇合中给定的分数区间的所有成员
15ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到低
16ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分数区间内的成员,分数从高到低排序
17ZREVRANK key member 返回有序汇合中指定成员的排名,有序集成员按分数值递加(从大到小)排序
18ZSCORE key member 返回有序集中,成员的分数值
19ZUNIONSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的并集,并存储在新的 key 中
20[ZSCAN key cursor [MATCH pattern] [COUNT count]](https://www.runoob.com/redis/...) 迭代有序汇合中的元素(包含元素成员和元素分值)