这才是真正的书评!从《Redis 使用手册》书评到整洁代码到设计模式

本文始于对《Redis 使用手册》一书阅读时产生的思考。如果你对是否要买这本书有疑惑,那么本文必看。本文共计约1700字。

在评价这本书以前,我想先对这本书的作者做一下介绍。《Redis 使用手册》的作者黄健宏,是《Redis 实战》的翻译,《Redis 设计与实现》的作者。豆瓣账号:黄健宏。

在他豆瓣读过的书中我看到了几本书:

  • 《翻译的基本知识》

  • 《英文写作指南》

  • 《翻译的技巧》

这才是真正的书评!从《Redis 使用手册》书评到整洁代码到设计模式

可见作者为了翻译还是下了一番苦功夫的。我们有理由相信这是一个认真的翻译,也应该会是一个认真的作者。

刚买到这本书时,我翻开快速阅览了一遍,从书中大量的插图可以看出作者之用心。整本书的美工和排版也都很有美感,可见编辑和出版社也很用心。我刚拿到这本书的时候评价这本书:“有一个负责的作者,负责的编辑,负责的出版社”。所以我觉得,这本书质量一定不会太差。

顺便吐槽一下,曾买过一本 Java EE SSM 整合的书,排版烂极了,我敢相信那本书打印好后,原作者看都没看就出版了。(当我没说)

言归正传,说一说这本书。这本书 538 页,约 3cm 厚度。作为一个基础书籍,几乎事无巨细讲解了 Redis 基础的每一个角落。所以作者给本书的定义是手册、工具书,学完以后还可以随时查阅。

到此,我对这本书的优点目前已经讲得很明确了:

  1. 事无巨细介绍了 Redis 几乎所有基础知识。

  2. 配有大量插图辅助理解。

  3. 排版美观,视觉上感到舒适。

  4. 作者翻译过 Redis 相关书籍,还写了一本关于Redis实现的书,且都好评居多,所以水平应该也不错

但是,这些优点,也正是这本书的缺点!

  1. 因为事无巨细、配图较多,所以这本书内容臃肿不够精炼。在明明文字可以解释清楚的地方仍然配有大量插图,实际上这是无用功。配图应该是文字不方便描述清楚时才需要添加的,而此时文字描述应该只是辅助。对于作者浪费了大量时间画了很多没有意义的图示,我感到十分惋惜。

  2. 本书定位为手册,但是作为手册查阅其实还不够方便。因为作者分开在各个小节讲解了一条命令不同选项的用法,却没有在一开始就给出一个命令完整的全貌。在读者需要用此书做手册查命令时,还需要依次去读完各个小节才能拼凑出一条完整的命令。实属坑爹。另外我希望此书下一版的命令不仅可以有全貌,还可以更有辨识度。

  3. 也是因为手册的定位,这本书作者对每一个 Redis 命令和知识点一视同仁,导致手册全篇内容没有重点。实际上有些内容在开发中十分重要,需要牢记,而有些内容作者只需提及,用的多了,就记住了(最后一章的cluster 中的很多命令就讲的太细了,有些内容其实读者一看命大概就了解了)。

  4. 可能还是因为手册的定位,手册没有对什么是缓存穿透、缓存雪崩、缓存击穿、Redis 内存淘汰策略等重要内容进行讲解,没有对 Redis 配置文件的解读,也没有讲 Redis 上很火的 bloom 过滤器

所以建议可以通过快速阅读本书,在基础上先入门,然后再对上文中提到的 Redis 中的热点知识进行补充学习。

此外,阅读过程中,我也体会到了一些写作的个人见解。

尽管作者写的很详细,但在阅读本书的过程中,我仍有不少时候会感到困惑。作者并没有按照官方给出的名称去命名命令的许多参数,比如书中使用了 sadd set element 这样的写法,但 Redis 官方给的是 sadd key member 这样的写法。我理解作者使用了开发中常用的命名应该见名知意的整洁代码理念,所以对名字进行了修改,以更方便读者了解其含义。但是,坏就坏在,Redis 中还存在 sismember key member 这样的命令。所以书中的 element 给读者理解和记忆都造成了困难。而后面介绍sortedSet时,其中zadd命令的写法反倒回归官方写法了。且书中这里称zset中的元素为“成员”,而前文中set中的元素却称“元素”。两者本身都属于set,但书中的命名岂不自相矛盾?

由此我总结出一点,作者在写作时应该遵循一个设计模式的设计原则:“单一职责原则”。即:在一本书中,一个名词应该只代表一样东西,同一样东西应该只用同一个名词进行描述。

比如 key,在 Redis 中只代表键,用于在一个数据库中唯一确定某一数据结构的引用,如 str, list, set, hash 等。而作者在本书中时而称之为 key,时而称之为 set,时而称之为 hash, list 等等。这样的方法是不可取的。实际上使用官方的命名可以让读者在本书和官方文档之间无缝切换,还因为贯彻始终的单一职责原则,更容易让人记忆。

比如这一批命令:

  • SET str strValue

  • HSET hash key value

  • RPUSH list item

  • SADD set element

  • SISMEMBER set element

  • ZSET sort_set member

和这一批命令:

  • SET key value

  • HSET key field value

  • RPUSH key value

  • SADD key member

  • SISMEMBER key member

  • ZADD key member

哪一批看起来更方便记忆呢?

我不由深思,即便如此简单的命名,Redis 官方似乎也考虑了很多。心中对 Redis 作者的敬佩感油然而生,大佬就是大佬啊。

这才是真正的书评!从《Redis 使用手册》书评到整洁代码到设计模式