zoukankan      html  css  js  c++  java
  • 《闲扯Redis四》List数据类型底层编码转换


    一、前言

    Redis 提供了5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要。

    原文解析

    Redis五种数据类型

    Redis 中的 list 是我们经常使用到的一种数据类型,根据使用方式的不同,可以应用到很多场景中。

    二、编码转换

     上节《闲扯Redis三》Redis五种数据类型之List型 中说道,List类型有两种实现方式:

    1、使用压缩列表(ziplist)实现的列表对象
    2、使用双端链表(linkedlist)实现的列表对象

     并且,留下了一个疑问?Redis列表什么时候会使用 ziplist 编码,什么时候又会使用 linkedlist 编码呢?

    Redis五种数据类型

    参见了《Redis设计与实现》,得出了一个结论: ziplistlinkedlist 之间存在着一种编码转换机制,当列表对象可以同时满足下列两个条件时,列表对象采用ziplist编码,否则采用linkedlist编码

    (1)列表对象保存的所有字符串元素的长度都小于64字节;

    (2)列表元素保存的元素数量小于512个;

    注意 :以上两个条件的上限值可以在配置文件中修改 list-max-ziplist-value 选项和 list-max-ziplist-entries 选项,另外对于使用 ziplist 编码的列表对象,当以上两个条件中任何一个不能满足时,对象的编码转换操作就会执行,原本保存在压缩列表里面的所有列表元素都会被转移并保存到双端链表里面,对象的编码也从 ziplist 变为 linkedlist

    Redis五种数据类型

    三、操作验证

     书中是这样说的,但是还是要自己操作验证一下的,go!

    Redis五种数据类型

     咦,什么鬼,不是说 ziplistlinkedlist ,还有编码转换吗,咋一个都不是,这个 quicklist 是什么结构?看到这大家可能有一点懵逼,细品之后甚至想要动手:七哥,你TM是不是在忽悠我?

    Redis五种数据类型

     嗯,这个不要急,听我继续哔哔( 假装冷静

    Redis五种数据类型

     先来看一下操作的redis的版本:

    ./redis-server --version
    

     版本显示:

    Redis五种数据类型

    再看一下,黄建宏老师《Redis设计与实现》第二版中对应的redis版本:3.0,查阅资料发现 redis 在 3.2 版本的时候,考虑到redis的空间存储效率和时间效率,引入了quicklist(快速列表)作为 list 的底层实现,原来是这样啊!

    Redis五种数据类型

    这就能说的通了,哈哈哈,下节咱们就来看看这个 quicklist 究竟是个什么啥,前面针对 3.0 版本的分析,看都看了,还能怎么办呢,权当做个了解了!

    四、要点总结

    (1)(Redis 3.2 版本前)列表对象底层实现的方式,压缩列表(ziplist)与双端链表(linkedlist)存在转换

    (2)(Redis 3.2 版本前)同时满足两个条件:列表对象保存的所有字符串元素的长度都小于64字节;列表元素保存的元素数量小于512个;列表对象采用 ziplist 编码,否则采用 linkedlist 编码

    (3)(Redis 3.2 版本)考虑到 Redis 的空间存储效率和时间效率,引入了 quicklist(快速列表)作为 list 的底层实现

    下节继续...

    Redis五种数据类型

  • 相关阅读:
    windows下python3.6环境搭建
    接口自动化(2)----如何编写接口自动化用例
    关于接口自动化测试的规则说明
    linux 常用命令 补充
    linux 常用命令
    linux 初识
    java高级教程 JDK代理和CGLIB代理两种方式 账户类
    java高级教程 实例化和非实例化 bean 学生信息
    java高级教程 俩数之和
    C++使用printf输出string类
  • 原文地址:https://www.cnblogs.com/jstarseven/p/12703628.html
Copyright © 2011-2022 走看看