一、概述
Sorted-Sets和Sets类型极为相似,它们都是字符串集合,都不允许重复的成员出现在同一个Set中。它们之间的主要差别是Sorted-Sets中每一个成员都有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。然而需要额外指出的是,尽管Sorted-Set中成员必须是唯一的,但是分数(score)却是可以重复的。在Sorted-Set中删除或更新一个成员都是非常快速的操作,其时间复杂度为集合中成员数量的对数,由于Sorted-Sets中的成员在集合中都是有序的,因此即便是访问位于结合中部的成员也是非常高效的。事实上,Redis所具有的这一特征在其它类型的数据库中是很难实现的,换句话说,在该点上要想达到和Redis同样的高效,在其它数据库中进行建模是非常困难的。
二、相关命令列表
命令格式:命令原型 时间复杂度+命令描述 返回值
- ZADD key score member [score member ...] O(log(N)) 时间复杂度中的N表示Sorted-Set中成员的数量。添加参数中指定的所有成员及其分数到指定的Sorted-Set中,在该命令中我们可以指定多组的score/member作为参数。如果在添加时参数中的某一成员已经存在,该命令将更新此成员的分数为新值,同时再将该成员基于新值从新排序。如果键不存在,该命令将为该键创建一个新的Sorted-Sets Value,并将score/member对插入其中。如果该键已经存在,但是与其关联的不是Sorted-Sets类型,将会返回相关的错误信息。返回值:本次操作实际插入的成员数量。
- ZCARD key O(1) 获取与该key相关联的Sorted-Sets中包含的成员数量。返回Sorted-Sets中的成员数量,如果该key不存在,将返回0。
- ZCOUNT key min max O(log(N)+M) 该命令用于获取分数(score)在min和max之间的成员数量。针对min和max需要额外说明的是。-inf 和+inf分别表示Sorted-Sets中分数的最高值和最低值。缺省情况下,min和max表示范围是闭区间范围,即min <= score <= max内的成员将被返回。然而我们可以通过在min和max的前面添加"(" 字符来表示开区间,如(min max 表示 min < score <= max,而(min (max表示min < score < max 。返回值:分数指定范围内的数量。
- ZINCRBY key increment member O(log(N)) 该命令将为指定key中指定成员增加指定的分数。如果成员不存在 ,该命令将添加该成员并假设其初始分数为0,此后再将分数加上increment。如果key不存在,该命令将创建该key及其关联的Sorted-Sets,并包含参数指定的成员,其分数为increment参数。如果与该