• redis常用数据类型对应的数据结构


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

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

    1、字符串

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

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

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

    条件:

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

    优点:

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

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

    条件:

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

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

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

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

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

    有序数组:

    条件:

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

    散列表:

    5、有序集合(sort set):

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

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

    条件:

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

    跳表:

  • 相关阅读:
    C++_重载、重写和重定义的区别
    C++静态库与动态库
    C++ 中重载运算符 “<” 及 friend属性
    C++中,关于#include<***.h>和#include"***.h"的区别
    static_cast, dynamic_cast, const_cast讨论
    浅析C++中static关键字
    C语言包含头文件时用引号和尖括号的区别
    vc实现透明位图,透明背景
    VS2008调试技巧——断点失效
    Spring解决循环依赖的理解
  • 原文地址:https://www.cnblogs.com/wjh123/p/11439705.html
Copyright © 2020-2023  润新知