美文网首页
Redis 对象及其编码

Redis 对象及其编码

作者: Muscleape | 来源:发表于2020-12-03 13:32 被阅读0次

查看某个对象使用的编码,可以使用命令:

redis> OBJECT ENCODING key

1、字符串对象(String)

1、编码方式

  • int:保存的是整数值,并且可以用long类型表示;
  • raw:保存字符串(包括浮点数),并且长度大于39字节;
  • embstr:只读,修改会变更为row,保存字符串(包括浮点数),并且长度小于等于39字节;

2、编码转换

  • int => raw:执行命令后,对象保存的值变更为字符串值时,自动转换;
  • embstr => raw:对象执行修改之后就会转换;

3、结构图

  • int


    image
  • raw


    image
  • embstr


    image

2、列表对象(List)

1、编码方式

  • ziplist:压缩列表,支持从两端添加,使用整块内存存储,每个节点保存一个列表元素;
  • linkedlist:双端链表,链表结构,每个节点保存一个字符串对象,每个字符串对象都保存一个列表元素;

2、编码转换

同时满足以下两种条件,使用ziplist编码,其他使用linkedlist
下面条件中的上限值可以修改配置文件

  • 保存的所有字符串元素的长度都小于64字节;
  • 列表保存的元素数量小于512个;

3、结构图

  • ziplist


    image-20201202192000619
  • linkedlist


    image-20201202192045190

3、哈希对象(Hash)

1、编码方式

  • ziplist:压缩列表,从表尾添加,先保存键的节点,再保存值得列表节点;
  • hashtable:字典,每个键、值都是字符串对象,字符串对象中保存了相应的键和值;

2、编码转换

同时满足以下两种条件,使用ziplist编码,其他使用hashtable
下面条件中的上限值可以修改配置文件

  • 所有键值对的键和值得字符串长度都小于64字节;
  • 键值对的数量小于512个;

3、结构图

  • ziplist


    image-20201202192223367
image-20201202192246991
  • hashtable


    image-20201202192306534

4、集合对象(Set)

1、编码方式

  • intset:整数集合,所有元素都保存在整数集合里面;
  • hashtable:字典,每个键都是字符串对象,其中包集合元素,字典的值都为null;

2、编码转换

集合对象同时满足以下两个条件,使用intset编码,其他使用hashtable编码
下面条件中的上限值可以修改配置文件

  • 所有元素都是整数值;
  • 元素数量不超过512;

3、结构图

  • insetset


    image-20201202193415688
  • hashtable


    image

5、有序集合对象(Zset)

1、编码方式

  • ziplist:压缩列表,每个元素两个节点,分别为元素和对应的分支,元素按分值从小到大排序;
  • skiplist:跳表+字典,跳表保证顺序操作,字典保证取数据O(1);

2、编码转换

集合对象同时满足以下两个条件,使用ziplist编码,其他使用skiplist编码
下面条件中的上限值可以修改配置文件

  • 元素数少于128个;
  • 所有元素的长度都小于64字节;

3、结构图

  • ziplist


    image-20201203132840913
    image-20201203132900146
  • skiplist


    image-20201203133109175

相关文章

  • Redis 对象及其编码

    查看某个对象使用的编码,可以使用命令:redis> OBJECT ENCODING key 1、字符串对象(Str...

  • Redis 列表对象

    列表对象编码可以是ziplist或者linkedlist。 typeencoding对象REDIS_LISTRED...

  • Redis 字符串对象及其编码详解

    当我们在redis里面保存一个键值对的时候,我们至少会创建两个对象,一个对象用作键值对的键(键对象),另外一个对象...

  • redis知识总结

    redis数据类型及其内部编码 FAQ: redis key和value最大长度?官网上说key和value的最大...

  • Redis对象与编码

    上周看完Redis设计与实现,过程结合Redis的unstable分支的源码来对照,基本对Redis的实现原理有了...

  • Redis对象类型与数据结构

    1. 对象类型与编码 Redis的对象由redisObject结构表示: type属性表示对象的类型: encod...

  • [redis 源码走读] 对象(redisObject)

    redis 对象 redis 对数据的处理用对象进行管理,目前有5种类型。每种对象类型并不是用单一的编码类型实现,...

  • Redis源码学习之类型

    说明 redis内部的字符串对象,redis类型之REDIS_STRING 此种类型有三种编码方式分别为:OBJ_...

  • 07.对象

    1.简介: redis 不直接通过数据结构操作数据,通过对象操作数据。 2.对象的类型和编码: redis 通...

  • Redis对象(二) - 对象实现

    redis中的五种数据对象都使用了不同的底层编码方式、那相互之间是如何转化的呢 ? 字符串对象 字符串对象的编码可...

网友评论

      本文标题:Redis 对象及其编码

      本文链接:https://www.haomeiwen.com/subject/rqruwktx.html