文章目录
- 简介
- 操作
- 增
- 删
- 查
- 改
- 数据结构
- 跳跃表
专栏目录请点击
简介
- 有序集合和普通的集合非常像,都是一个没有重复元素的字符串集合
- 但是有序结合每一个成员都有一个属性叫做评分(score),这个评分被用来按照从最低分到最高分的方式排序集合中的成员(集合成员是唯一的,但是评分可以重复)
- 也可以根据评分或者次序来获取一个范围内的元素
操作
增
-
zadd <key><score1><value1><score2><value2>…
:将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
删
-
zrem <key><value>
删除该集合下,指定值的元素
查
-
zrange <key><start><stop> [WITHSCORES]
:返回有序集 key 中,下标在<start><stop>
之间的元素,带WITHSCORES
,可以让分数一起和值返回到结果集。 -
zrangebyscore key minmax [withscores] [limit offset count]
:返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。
-
zrevrangebyscore key max min [withscores] [limit offset count]
:与上面的类似,只不过是从大到小进行排列的
-
zcount <key><min><max>
统计该集合,分数区间内的元素个数
-
zrank <key><value>
返回该值在集合中的排名,从0开始
改
-
zincrby <key><increment><value>
为元素的score
加上增量
数据结构
- 有序集合是一种非常特别的数据结构,它类似于对象,对象中键是有序集合的值,值为有序结合的分数
- 他底层使用了两个数据结构
- hash,hash的作用是管能量元素
value
和权重score
,保障元素的唯一性,可以通过元素value找到相应的score的值 - 跳跃表,跳跃表的目的是在于给元素vaule排序,根据score的范围获取元素列表
跳跃表
有序链表
我们先看看有序链表
如果我们要查找51的元素,那么他需要从第一个元素开始依次查找,一共需要六次
跳跃表
我们观看跳跃表的结构,如果要查找51的节点,那么,进行如下的查找步骤
- 从第2层开始,1节点比51节点小,那么会向后进行比较
- 21节点比51节点小,继续向后比较,但是就到null了,所以这里就从第2层的21节点移到下一层的21节点
- 并向后比较,在第一层41节点比51节点小,
- 继续向后比较,61节点比51节点大,所以再向下移动一层,在,好到了51节点
前后一共比较了4次