一、Redis之Zset简介
1. 有序集合Zset是String类型的有序集合。
2. Zset中每个元素都会关联一个double类型的分数值,redis通过分数值来为集合中所有成员进行从小到大排序。
3. Zset的成员是唯一的,但分数值可以重复。
4. Zset是通过hash表实现的,添加、删除、查找的复杂度都是O(1)。
5. Zset最大的成员数量为2-1(40多亿)个。
二、Redis之Zset命令行操作
Zadd:将一个或多个成员元素及其分数值加入到有序集当中。如果某个成员已经是有序集的成员,则更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。分数值可以是整数值或双精度浮点数。
Zrange:返回有序集中指定区间内的成员。成员按分数值递增排序,分数值相同的则按字典序来排序。查看Zset所有成员:zrange zset_name 0 -1。
Zrevrange:返回有序集中指定区间内的成员。成员按分数值递减排序,分数值相同的则按字典序的逆序来排序。
Zrangebyscore:返回有序集中指定分数区间的成员列表,按分数值递增排序,分数值相同的则按字典序来排序。默认使用闭区间。
Zrevrangebyscore:返回有序集中指定分数区间的成员列表,按分数值递减排序,分数值相同的则按字典序的逆序来排序。注意,区间表示的时候大值在前,小值在后,默认使用闭区间。
-inf表示负无限,+inf表示正无限。
Zrangebylex:通过字典区间返回有序集的成员列表。注意,只有有序集合中所有成员的分数值都相同的时候才会根据成员的字典序来排序,否则该命令返回的结果将是不可预知的。参数必须指明是开区间还是闭区间。+表示正无限,-表示负无限。
Zscan:迭代有序集合中的元素。
Zcard:返回指定有序集的元素数量。
Zcount:返回有序集中指定分数区间的成员数量。
Zlexcount:返回有序集中指定字典区间的成员数量。必须指定区间是开区间还是闭区间。
Zscore:返回有序集中指定成员的分数值。
Zrank:返回有序集中指定成员的排名,按分数值递增排序。分数值最小者排名为0。
Zrevrank:返回有序集中指定成员的排名,按分数值递减排序。分数值最大者排名为0。
Zrem:移除有序集中的一个或多个成员,忽略不存在的成员。
Zremrangebylex:移除有序集中指定字典区间的所有成员。注意,只有有序集合中所有成员的分数值都相同的时候才会根据成员的字典序来排序,否则该命令操作的结果将是不可预知的。
Zremrangebyrank:移除有序集中指定排名区间的所有成员。
Zremrangebyscore:移除有序集中指定分数值区间的所有成员。
Zincrby:对有序集中指定成员的分数值增加指定增量值。若为负数则做减法,若有序集不存在则先创建,若有序集中没有对应成员则先添加,最后再操作。
下面对交集和并集的计算将使用以下两个有序集合进行示例:
Zinterstore:计算给定一个或多个有序集的交集,并将其存储到一个目的有序集中。默认情况下。
Zunionstore:计算给定一个或多个有序集的并集,并将其存储到一个目的有序集中。
结果集中某个成员的分数值是所有给定集下该成员分数值之和。