简介:
Redis有序集合zset 与普通集合set非常相似,是一个没有重复元素的字符串集合。
但有序列表的每个成员都关联了一个评分score,用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以重复
常用命令:
zadd [key] [score1] [value1] [score2] [value2]...将一个或多个value及其score存入有序集中
zrange [key] [st] [ed] [WITHSCORES]返回有序集key中,下标在st和ed之间的元素
加入withscores标注后,score也会被返回到结果中
zrangebyscore [key] [min] [max] [WITHSCORE] 返回有序集key中,
所有score在[min,max]之间的成员,
zset有序集成员按score值递增排列
zrevrangebyscore [key] [min] [max] [WITHSCORE] 同上,但按score递减排列
zincrby [key] [step] [value] 让key中指定的值value的score增加step
zrem [key] [value] 删除zset有序集中,指定value值的元素
zcount [key] [min] [max] 返回score在[min,max]中分数的个数
zrank [key] [value] 返回该值value在集合中的排名(!下标从0开始)
数据结构:
zset底层使用了两个数据结构
(1)hash,hash的作用就是关联 元素value 和 权重score。保障元素value的唯一性,可以通过value找到对应的score值。
(2)跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。
跳跃表效率与红黑树相近,而实现比红黑树简单。(倍增?)
SortedSet(zset)是Redis提供的一个特别数据结构。
类似与Map<String,Double>,给每一个元素赋予权重。
又类似TreeSet,内部元素会按照score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。