redis 常用数据类型操作五 有序集合(zset)


redis 有序集合(zset)

简介

redis的有序集合zset和普通集合set极其相似,是一个 没有重复元素的字符串集合

不同之处是有序集合的每个成员都关联了一个 评分(score) 这个评分(score) 被用来按照从最低份到最高分的方式排序集合中的成员。集合中的成员是唯一的,但是评分是可以重复了

因为元素的上有序的,所以可以很快的根据评分(score)或者次序(position)来获取一个范围内的元素

访问有序集合的中间元素也是非常快的,因此能够使用有序集合做一个没有重复成员的智能列表。

常用命令

zadd :将一个或多个member元素及其score值加入到有序集合key中

zrange [WITHSCORES] 返回有序集合key中,下标在 之间的元素,带有WITHSCORES可以让分数和值一起返回到结果集

 

zrangebyscores key min max [withscores] [limit offset count]:返回有序集合key中,所有score值介于min和max 之间(包括等于min或max)的成员。有序结合按score值递增(从小到大)次序排列


zrevrangebyscores key max min[withscores] [limit offset count] 同上 ,改为从大到小排列

zincryby 为元素的score加上增量

zrem 删除该集合下,指定值的元素

zcount 统计该集合,分数区间内元素个数

zrank 返回该值在集合中的排名从0开始

数据结构

zset是redis 提供的一个非常特殊的数据结构,一方面他等价于c#的Dictionary,可以给每一个value赋予一个权重score,另一方面它又类似于TreeSet,内部元素会按照权重score进行排序,可以得到每个元素名次,还可以通过score的范围来获取元素列表。

zset底层使用了两个数据结构

(1)hash,hash的作用就是关联value的权重score,保障value的唯一性,可以通过value找到对应score值

(2)跳跃表,跳跃表的目的是在于给元素value排序,根据socre的范围来获取元素列表。