本文始於對《Redis 使用手冊》一書閱讀時產生的思考。如果你對是否要買這本書有疑惑,那麼本文必看。本文共計約1700字。
在評價這本書以前,我想先對這本書的作者做一下介紹。《Redis 使用手冊》的作者黃健宏,是《Redis 實戰》的翻譯,《Redis 設計與實現》的作者。豆瓣賬號:黃健宏。
在他豆瓣讀過的書中我看到了幾本書:
-
《翻譯的基本知識》
-
《英文寫作指南》
-
《翻譯的技巧》
可見作者爲了翻譯還是下了一番苦功夫的。我們有理由相信這是一個認真的翻譯,也應該會是一個認真的作者。
剛買到這本書時,我翻開快速閱覽了一遍,從書中大量的插圖可以看出作者之用心。整本書的美工和排版也都很有美感,可見編輯和出版社也很用心。我剛拿到這本書的時候評價這本書:“有一個負責的作者,負責的編輯,負責的出版社”。所以我覺得,這本書質量一定不會太差。
順便吐槽一下,曾買過一本 Java EE SSM 整合的書,排版爛極了,我敢相信那本書打印好後,原作者看都沒看就出版了。(當我沒說)
言歸正傳,說一說這本書。這本書 538 頁,約 3cm 厚度。作爲一個基礎書籍,幾乎事無鉅細講解了 Redis 基礎的每一個角落。所以作者給本書的定義是手冊、工具書,學完以後還可以隨時查閱。
到此,我對這本書的優點目前已經講得很明確了:
-
事無鉅細介紹了 Redis 幾乎所有基礎知識。
-
配有大量插圖輔助理解。
-
排版美觀,視覺上感到舒適。
-
作者翻譯過 Redis 相關書籍,還寫了一本關於Redis實現的書,且都好評居多,所以水平應該也不錯。
但是,這些優點,也正是這本書的缺點!
-
因爲事無鉅細、配圖較多,所以這本書內容臃腫不夠精煉。在明明文字可以解釋清楚的地方仍然配有大量插圖,實際上這是無用功。配圖應該是文字不方便描述清楚時才需要添加的,而此時文字描述應該只是輔助。對於作者浪費了大量時間畫了很多沒有意義的圖示,我感到十分惋惜。
-
本書定位爲手冊,但是作爲手冊查閱其實還不夠方便。因爲作者分開在各個小節講解了一條命令不同選項的用法,卻沒有在一開始就給出一個命令完整的全貌。在讀者需要用此書做手冊查命令時,還需要依次去讀完各個小節才能拼湊出一條完整的命令。實屬坑爹。另外我希望此書下一版的命令不僅可以有全貌,還可以更有辨識度。
-
也是因爲手冊的定位,這本書作者對每一個 Redis 命令和知識點一視同仁,導致手冊全篇內容沒有重點。實際上有些內容在開發中十分重要,需要牢記,而有些內容作者只需提及,用的多了,就記住了(最後一章的cluster 中的很多命令就講的太細了,有些內容其實讀者一看命大概就瞭解了)。
-
可能還是因爲手冊的定位,手冊沒有對什麼是緩存穿透、緩存雪崩、緩存擊穿、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 作者的敬佩感油然而生,大佬就是大佬啊。