zoukankan      html  css  js  c++  java
  • redis常用数据类型对应的数据结构

    redis的数据类型都是通过多种数据结构来实现,主要是出于时间和空间的考虑,当数据量小的时候通过数组下标访问最快,占用内存最小【压缩列表是数组的变种,允许存储的数据大小不同

    因为数组需要占用连续的内存空间,所以当数据量大的时候,就需要使用链表,同时为了保证速度又需要和数组结合,也就有了散列表。

    1、字符串

    2、列表(list):支持存储一组数据,这种数据类型对应两种实现方法,一种是压缩列表,另一种是双向循环链表

    压缩列表:数据集比较少的时候,采用压缩列表

    redis自己设计的一种存储结构,类似数组,通过一片连续的内存空间来存储数据,但它允许存储的数据大小不同

    条件:

    • 列表中保存的单个数据小于64个字节
    • 列表中数据个数少于512个

    优点:

    • 节省内存
    • 支持不同类型数据的存储
    • 数据存储在一片连续的内存空间,通过键来获取值为列表类型的数据,读取效率也非常高。
    双向循环链表:数据量比较大时,列表使用双向循环链表实现
     
    3、字典(hash):存储一组数据对,每个数据对又包含键值两部分。

    压缩列表:数据集比较少的时候,采用压缩列表

    条件:

    • 列表中保存的键和值的大小都小于64个字节
    • 列表中键值对个数少于512个

    散列表:数据量比较大,不满足上述条件,使用散列表实现。

    redis使用MurmurHash2这种运行速度快,随机性好的哈希算法作为哈希函数,对于哈希冲突,redis使用链表法来解决。

    redis支持散列表的动态扩容、缩绒。

    4、集合(set):一种是基于有序数组,一种是基于散列表

    有序数组:

    条件:

    • 存储的数据都是整数
    • 存储的数据元素个数不超过512个

    散列表:

    5、有序集合(sort set):

    用来存储一组数据,并且每个数据会附带一个得分。通过得分的大小,我们将数据组织成跳表这样的数据结构,以支持快速地按照得分值、得分区间获取数据。

    压缩列表:数据集比较少的时候,采用压缩列表 

    条件:

    • 保存的数据小于64个字节
    • 元素个数小于128个

    跳表:

  • 相关阅读:
    找轮转后的有序数组中第K小的数
    linux下安装tomcat,并设置自动启动
    maven中添加proguard来混淆代码
    Maven编译可执行jar
    Maven pom项目部署
    Eclipse主题设置
    double hashing 双重哈希
    推荐系统
    vim插件
    多标记学习--Learning from Multi-Label Data
  • 原文地址:https://www.cnblogs.com/wjh123/p/11439705.html
Copyright © 2011-2022 走看看