字符串对象编码

int、raw、embstr。

int:整数
raw:如果保存的是一个字符串,并且长度大于32字节,那么字符串对象将使用sds来保存,编码为raw
embstr: 如果字符串小于等于32字节,编码为embstr。

int

字符串编码-int.png

int编码的字符串保存的整数值,long类型保存。redisObject->ptr = long


raw

字符串编码-raw.png
raw编码的字符串通过sds来保存,redisObject->ptr = *sdshdr

sds结构请移步 redis sds


embstr

字符串编码-embstr.png
embstr 是一种专门用于保存短字符串的一种优化编码方式,和raw一样,结构是sdshdr,区别是raw编码会调用两次内存分配函数来分别创建redisObject结构和sdshdr,而embstr调用一次来分配一块连续空间,依次包含RedisObject和sdshdr

embstr和raw编码在执行命令时效果是相同的,但是使用embstr保存短字符串的好处是:

  1. 创建字符串所需的内存分配次数由2次变为1次。
  2. 释放内存同样也由2次变为1次。
  3. 因为保存在一块连续的内存里,所以比起raw,能够更好地利用缓存。

标签: none

添加新评论