第 8 章《对象》

64 页

在这一页的倒数第二段:

如果字符串对象保存的是一个字符串值, 并且这个字符串值的长度大于 32 字节, 那么字符串对象将使用一个简单动态字符串(SDS)来保存这个字符串值, 并将对象的编码设置为 raw

在本书定稿之后, Redis 将这个值从 32 改为了 39 , 所以我们也需要进行相应的更新, 修改之后的内容为:

如果字符串对象保存的是一个字符串值, 并且这个字符串值的长度大于 39 字节, 那么字符串对象将使用一个简单动态字符串(SDS)来保存这个字符串值, 并将对象的编码设置为 raw

受此影响, 65 页的图 8-2 也要更新为以下模样(图中的 len 属性有改动):

digraph {

    label = "\n 图 8-2    raw 编码的字符串对象";

    rankdir = LR;

    node [shape = record];

    redisObject [label = " redisObject | type \n REDIS_STRING | encoding \n REDIS_ENCODING_RAW | <ptr> ptr | ... "];

    sdshdr [label = " <head> sdshdr | free \n 0 | len \n 43 | <buf> buf"];

    buf [label = " { 'L' | 'o' | 'n' | 'g' | ... | 'k' | 'i' | 'n' | 'g' | ' ' | '.' | '.' | '.' | '\\0' } " ];

    //

    redisObject:ptr -> sdshdr:head;
    sdshdr:buf -> buf;

}

而创建图 8-2 所示字符串的代码也要改为:

redis> SET story "Long, long, long ago there lived a king ..."
OK

redis> STRLEN story
(integer) 43

redis> OBJECT ENCODING story
"raw"

感谢 xp 反馈这个问题。

65 页

在这一页的中间开头第一段:

如果字符串对象保存的是一个字符串值, 并且这个字符串值的长度小于等于 32 字节, 那么字符串对象将使用 embstr 编码的方式来保存这个字符串值。

在本书定稿之后, Redis 将这个值从 32 改为了 39 , 所以我们也需要进行相应的更新, 修改之后的内容为:

如果字符串对象保存的是一个字符串值, 并且这个字符串值的长度小于等于 39 字节, 那么字符串对象将使用 embstr 编码的方式来保存这个字符串值。

感谢 xp 反馈这个问题。

75 页

在 8.5 节开头的介绍内容中, 第二段代码:

redis> SAD Dfruits "apple" "banana" "cherry"
(integer)3

中的 SADD 命令印刷出错, 正确的代码应该为:

redis> SADD fruits "apple" "banana" "cherry"
(integer)3

感谢 zhkzyth 反馈这个错误。

77 页

8.6 节开头的第二段:

ziplist 编码的压缩列表对象使用压缩列表作为底层实现, ……

中的“压缩列表对象”有误,应该改为“有序集合对象”才对, 以下是修正之后的内容:

ziplist 编码的有序集合对象使用压缩列表作为底层实现, ……

80 页

本页的最后一句:

因为有序集合键的值为哈希对象, 所以用于有序集合键的所有命令都是针对哈希对象来构建的, 表 8-1 列出了其中一部分有序集合键命令, 以及这些命令在不同编码的哈希对象下的实现方法。

这里的“哈希对象”应该全部改为“有序集合对象”才对, 以下是修正后的正文:

因为有序集合键的值为有序集合对象, 所以用于有序集合键的所有命令都是针对有序集合对象来构建的, 表 8-1 列出了其中一部分有序集合键命令, 以及这些命令在不同编码的有序集合对象下的实现方法。

感谢 Andy 反馈这个问题。