zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

redis常用数据类型之有序集合

Redis集合 常用 数据类型 有序
2023-09-11 14:19:18 时间

专栏目录请点击

简介

  • 有序集合和普通的集合非常像,都是一个没有重复元素的字符串集合
  • 但是有序结合每一个成员都有一个属性叫做评分(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的节点,那么,进行如下的查找步骤

  1. 从第2层开始,1节点比51节点小,那么会向后进行比较
  2. 21节点比51节点小,继续向后比较,但是就到null了,所以这里就从第2层的21节点移到下一层的21节点
  3. 并向后比较,在第一层41节点比51节点小,
  4. 继续向后比较,61节点比51节点大,所以再向下移动一层,在,好到了51节点

前后一共比较了4次