Redis基本数据结构

五种基本数据类型

String(字符串

  • 简介:String是Redis最基础的数据结构类型,它是二进制安全的,可以存储图片或者序列化的对象,值最大存储为512MSDS动态字符串,是一个简单的动态字符串,采用预分配冗余空间的方式来减少内存的频繁分配,类似于Java中的ArrayList;

Hash(哈希)

  • hash是一个键值对的集合,hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似于Java里面的map,hash特别适合用于存储对象hash对应的数据结构是ziplist和hashtable(哈希表)当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable

List(列表

  • 单键多值,按照插入顺序排序,你可以添加一个元素列表的头部或者尾部底层实际上是一个双向链表,对两边的操作性能很高,通过索引下标的操作中间的节点性能会比较差lpush,rpush命令
  • 可以从左右两边插入值值在键在,值光键亡list的数据结构为快速数据链表quiklist
  • 首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构式ziplist,也即是压缩列表将所有的元素挨着一起存储,分配的是一块连续的内存,当数据量比较多的时候才会变成quiklist
  • 因为普通的列表需要的附加指针空间太大,会比较浪费空间,比如这个列表里存的只是int类型的数据,结构上还需要两个额外的prev和next
  • redis将链表和ziplist结合起来组成了quiklist。也就是将多个ziplist使用双向指针串起来,这样既满足了快速的插入删除性能,又不会出现太大的空间冗余

Set(集合)

  • set是string类型的无序集合,他底层其实是一个value为null的hash表,所以添加、删除、查找的复杂度都是o(1)
  • 一个算法,随着数据的增加,执行的时间长短,如果是O(1),数据增加,查找数据的时间不变
  • set的数据结构是dist字典,字典是hash表实现的
  • Zset(有序集合)

  • redis有序集合zset,与普通集合set非常相似,是一个没有重复元素的字符串集合
  • 不同之处是有序集合的每个成员都关联了一个评分,这个评分被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分是可以重复的
  • 因为元素是有序的,所以也可以很快的根据评分或者次序来获取一个范围的元素
  • 访问有序集合的中间元素也是非常快的,
  • hash,hash的作用是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到对应的score值
  • 跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表
  • 跳跃表的效率堪比红黑树,实现远比红黑树简单,可以快速找到元素
  • 三种特殊数据类型

    Geospatial

  • Bitmaps本身不是一种数据类型,实际上它就是字符串(key-value),但是它可以对字符串的位进行操作
  • Bitmaps单独提供了一套命令,所以在Redis中使用BitMaps和使用字符串的方式不太相同,可以把Bitmaps想象成一个以位为单位的数组,数组的每个单元只能存储0和1,数组的下标在Bitmaps中叫偏移量
  • Hyperloglog

  • 可以用来统计页面访问量
  • 数据存储在MySQL表中,使用distinct count计算不重复的数
  • 使用redis提供的hash,set,bitmaps等数据结构来处理
  • 以上方案的结果精确,但随着数据不断增加,导致占用空间越来越大,对于非常大的数据集是不切实际的
  • HyperLoglog是用来基数统计的算法,优点:在输入元素的数量或者体积非常大时,计算基数所需的空间总是固定的,并且很小
  • 什么是基数:比如数据集{1,3,5,7,5,7,8},那么这个数据集的基数集就为{1,3,5,7,8},基数(不重复元素)为5,基数估计就是在误差可接受范围内,快速计算基数
  • Bitmap

  • 提供了经纬度设置,查询,范围查询,距离查询,经纬度hash等常见操作
  • 命令geoadd 添加地理位置(经度,纬度,名称)
  • 命令geopos 获得指定地区的坐标值
  • 命令geodist 获取两个位置之间的直线距离
  • 命令georadius,以给定的经纬度为中心,找出某一半径内的元素
  • 郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
    (0)
    用户投稿
    上一篇 2022年6月15日
    下一篇 2022年6月15日

    相关推荐

    联系我们

    联系邮箱:admin#wlmqw.com
    工作时间:周一至周五,10:30-18:30,节假日休息