字符串对象

字符串对象的编码可以是int、raw和embstr

  1. 一个字符串对象保存的是整数值,并且这个整数值可以用long类型来表示,那么用long类型的整数保存,即编码为int
  2. 一个字符串对象保存的是浮点数值,并且这个浮点数值可以用long double类型来表示,
    那么用embstr编码的简单动态字符串(SDS) 或者 简单动态字符串(SDS)保存,即编码为embstr 或者 raw
  3. 一个字符串对象保存的是字符串值,并且这个字符串值的长度 > 39 byte,那么用简单动态字符串(SDS)保存,即编码为raw
  4. 一个字符串对象保存的是字符串值,并且这个字符串值的长度 <= 39 byte,那么用embstr编码的简单动态字符串(SDS)保存,即编码为embstr

使用embstr编码的字符串对象来保存短字符串值的好处

  1. embstr编码将创建字符串对象所需的 内存分配次数 从raw编码的 2次 降低为 1次
  2. embstr编码将释放字符串对象所需的 内存释放函数 从raw编码的 2次 降低为 1次
  3. 因为embstr编码的字符串对象的所有数据都保存在一块连续的内存里面,所以embstr编码的字符串对象能够更好地利用缓存的优势

编码的转换

int编码的字符串对象和embstr编码的字符串对象在条件满足的情况下,会被转换为raw编码的字符串对象

  1. 对于int编码的字符串对象来说,如果我们向对象执行了一些命令,
    使得这个对象保存的不再是整数值,而是一个字符串值,
    那么字符串对象的编码将从int变为raw,比如append命令

  2. 对于embstr编码的字符串对象来说,embstr编码的字符串对象实际上是只读的,
    当对embstr编码的字符串对象执行 任何修改命令 时,那么字符串对象的编码将从embstr变为raw

源码阅读

  1. 文件:src/t_string.c
只言片语任我说,提笔句句无需忖。落笔不知寄何人,唯有邀友共斟酌。
原文地址:https://www.cnblogs.com/phonecom/p/15129300.html