有序集合和集合几乎一样。 不同的是,有序集合中的元素可以排序,但与列表使用下标进行排序不同,有序集合使用分数作为依据进行排序。 有序集合不能重复,但分数可以重复。
使用场景对发表在博客网站上的文章进行排名。 排名的维度可能是按时间、按评价数。 例如,使用用户每天发布的文章的评价数,实现以下功能。 1、增加用户评价数2、取消用户赞成与否3、展示评价数最多的10个用户4、显示用户信息及用户得分。 考虑使用有序的集合来实现。
实现有序集合的实现有压缩列表ziplist、跳过列表skiplist两种。 使用元素数量少、元素小的压缩列表; 元素个数超过128个,转换为skiplist; 如果一个元素大于64字节,它将转换为skiplist。
添加命令#成员zaddkeyscorememeber [ score memeber . ] zadd有四个选项
nx: member必须不存在,才能成功设置和添加
xx: member必须存在,才能成功配置以进行更新
ch:返回本次操作后,有序集合和分数变化的个数
incr:被添加到score中相当于后述的zincrby
有序集合与集合相比,排序特性增加,因此产生成本,zadd的时间复杂度为o[log[n],sadd的时间复杂度为o[1]
#计算成员数zcard key#计算成员分数zscore key member#计算成员排名zrankkeymemberzrevrankkeymember #成员zrem key member [ member . 增加成员分数zinc rby密钥增量成员#指定排名范围内的成员zrangekeystartend [ with scores ] zrevrangekeystartend [ with scores ] # 返回的指定分数范围内的成员zrangebyscorekeyminmax [ with scores ] [ limitoffsetcount ] zrevangebyscorekeymaxmin [ with scores ] [ limitoffffsetion 返回指定分数范围内的成员数zcount key min max#删除指定排名中的升序元素zremrangebyrank key start end#指定分数范围内的成员zremrangebyscore key