這纔是真正的書評!從《Redis 使用手冊》書評到整潔代碼到設計模式

本文始於對《Redis 使用手冊》一書閱讀時產生的思考。如果你對是否要買這本書有疑惑,那麼本文必看。本文共計約1700字。

在評價這本書以前,我想先對這本書的作者做一下介紹。《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 作者的敬佩感油然而生,大佬就是大佬啊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章