对码当歌,猿生几何?

Redis主要数据类型的编码

简单动态字符串

底层编码

  1. 整数字符串对象

  2. embstr编码的字符串对象

  3. 简单动态字符串

转换

  1. long int使用int编码

  2. float使用 简单动态字符串编码

  3. 当使用embstr编码的字符串长度大于39时,转换为简单动态字符串编码


列表

底层数据结构

  1. 压缩列表

  2. 双端链表

转换

  • 列表元素长度大于64个字节或者列表元素数量大于512压缩列表编码则转换为双端链表


Hash

底层数据结构

  1. 压缩列表

  2. 字典

转换

  • 列表元素长度大于64个字节或者列表元素数量大于512压缩列表编码则转换为字典

集合

底层数据结构

  1. 整数集合,int16 int32 int64

  2. 字典。存储时字典的key存储集合元素,value存储null

转换

  • 整数集合转换为字典,存储的整数数量超过512则使用字段


有序集合

底层数据结构

  1. 压缩列表

  2. 跳跃表

转换

  • 压缩列表编码要求集合元素数量小于128,元素大小小于64字节。不满足这两个条件则转换为跳跃表。