• Redis7的数据结构


    Redis以键-值对的形式存储数据

    一、键
    1、键的特点

    键是一个字符串,这个字符串的内容可以是数字、字符序列,也可以是一个文件的字节序列,甚至空字符串也可以做为key。

    在一个数据库中键必须是唯一的。

    键最大可以达到512M,但太长的键会占用更多的空间,同时也会影响查询的效率。

    2、键的格式

    在redis中一个键可以是一个简单的值,如

    //序列
    sequence

    也可以由多个部分组成,每个部分之间使用“:”分隔。如

    //用户信息,格式为账号:姓名:角色
    root:管理员:admin

        这种方式也是redis推荐的方式,过短的key不利于描述业务状态,而过长的key会占用更多内存,而且查询效率也会受到影响。

    二、值
    1、特点

    值可以重复

    2、值的类型

        其中值的数据类型有以下几种(数据的存储结构):string类型,list类型、hash类型、set类型、zset类型、stream类型

    1)string类型

        值的类型为字节序列,包括文本、序列化对象和二进制数组,一个key对应一个值。默认情况下每个字符串的最大值为512 MB


        字符串其底层使用三种数据结构存储数据,分别为int、embstr和raw。

        int:当值为整数时,会以int型进行存储

        embstr:当字符串的字节数小于等于44个时,会以embstr类型存储

        raw:当字符串的字节数大于44个时,会以raw类型存储

    2)list类型

    一个键对应一组字符串,可以把值看成一个数组,其值是有序(即取出顺序与添加时的顺序相同)且可重复的


        list其底层使用quicklist存储数据

        quicklist:称为快速列表,是由listPack组成的双向链表,即quicklist的每一个节点都是一个listPack。当listPack的大小超过8k时,才会创建下一个节点。

        listPack是优化后的ziplist,listPack每个节点不再包含前一个节点的长度,这样就可以避免端情况下连锁更新带来的不小的性能消耗。

    3)hash类型

        一个键对应另一组键值对,可以把值看成一个Map集合,它的键被称为字段,值被称为字段的值,字段无序且不重复,字段值无序且可重复。

        默认情况下hash使用listpack存储,当保存的字段-值的数量大于512个或者当个字段的值大于64个字节时,改为hashtable。


    4)set类型

        与list一样是一个键对应一组值,但值不能重复且不按插入的顺序保存

        当第一次插入的数据是一个整数时,会使用intset存储数据 ,只有有任何一个值不是整数,则改为hashtable存储


    5)zset类型

    zset与set的区别是此值是有序的,可以通过下标指定值的位置

        zset默认使用listpack存储数据,当值的数量大于128或是某个值的长度大于64个字节,改为skiplist存储数据


    6)stream类型

        Stream也是一种hash数据,可以简单的理解为hash的每一个值都为一个列表,而它的字段名是自动生成的

        它的底层结构就是stream


    注:

    要查看key的数据类型可以使用以下命令

    type key

    要查看key的底层存储结构可以使用以下命令

    object encoding key

     文章来源于哔站《Redis7的数据结构

    更多学习视频和专栏文章请到哔站个人空间: 布道师学院的个人空间-布道师学院个人主页-哔哩哔哩视频

    更多资源和项目下载请到:”开源吧(找实战项目和毕设项目的好网站)“ ​ :开源吧

     

  • 相关阅读:
    提高篇(七):Processing与物联网的结合:如何创建智能互动艺术装置
    【C】想动态分配内存?动态内存管理了解一下
    shell中的printf实践:美颜的九九乘法表
    CC2642 OAD文件合成
    vue2 通过vue.config.js实现跨域
    密码学奇妙之旅、03 HMAC单向散列消息认证码、Golang代码
    自定义hooks函数
    第5章 - 二阶多智能体系统的协同控制 --> 连续时间含时延系统一致性
    基于Mendix移动原生的离线应用
    NIO Netty(三)
  • 原文地址:https://blog.csdn.net/ouyangqing/article/details/133419716