來自Reids之父的Salvatore Sanfilippo的自述。
Redis 是我在大約3年前為了解決一個實際問題而創造出來的:簡單來說,當時我在嘗試做一件使用硬碟儲存關聯式資料庫( on-disk SQL database )無法完成的事情——在一臺我能夠支付得起的小虛擬機器器上面處理大量寫入負載。
我要解決的問題在概念上並不複雜:多個網站會通過一個小型的JavaScript 追蹤器( tracker )連續不斷地向我的伺服器傳送頁面存取記錄(pageview),而我的伺服器需要為每個網站儲存一定數量的最新頁面存取記錄,並通過網頁將這些記錄實時地展示給使用者觀看。
在最大負載達到每秒數千條頁面記錄的情況下,無論我使用什麼樣的資料庫模式( schema ),無論我如何進行優化,我所使用的關聯式資料庫都沒辦法在這個小虛擬機器器上處理如此大的負載。因為囊中羞澀,我沒辦法對虛擬機器器進行升級,並且我覺得應該有更簡單的方法來處理一個由推人值組成的列表。最終,我決定自己寫一個實驗性質的記憶體資料庫原型( prototype),這個資料庫使用列表作為基本資料型別,並且能夠對列表的兩端執行常數時間複雜度的彈出(pop) 和推入( push)操作。長話短說吧,這個記憶體資料庫的想法的確奏效了,於是我用C語言重寫了最初的資料庫原型,並給它加上了基於子程序實現的持久化特性,Redis 就這樣誕生了。
Redis始於實用主義——它是一個程式設計師因為找不到合適的工具來解決手頭上的問題而發明的,這是我認為理論性書籍無法很好地介紹Redis 的原因,這也是我喜歡《Redis實戰)( Redis in Action)的原因:這本書是為那些想要解決問題的人而寫的,它沒有乏味地介紹API,而是通過一系列引人入勝的例子深入地探究了Redis 的各項特性以及資料型別。
第1章 對Redis進行了基本介紹,列舉了Redis提供的5種資料結構,對比了Redis與其他資料庫之間的相同之處和不同之處,實現了一個可以對文章進行投票的簡單文章聚合網站。
第2章 介紹瞭如何使用Redis來提升應用程式的效能以及如何使用Redis來實現基本的網路分析。不太瞭解Redis的讀者應該會從第2章開始逐漸明白Redis在最近幾年變得越來越流行的原因一因為它簡單易用, 而且效能強勁。
第3章 基本上是一個命令檔案,它陸續介紹了Redis 的常用命令、基本事務命令、排序命令和過期時間命令,並給出了這些命令的使用範例。
第4章 介紹了資料持久化、效能測試、故障恢復以及防止資料丟失等概念。這一章前幾節介紹的內容都是和Redis管理有關的,而之後的4.4節和4.5節則深入地討論了Redis 事務和流水線命令的效能。Redis 新手和中級Redis 使用者都應該閱讀4.4節和4.5節,因為本書在之後的章節裡面會再次回顧這兩節提到的問題。
第5章 介紹了將Redis用作資料庫,並使用它來實現紀錄檔、計數器、IP所屬地查詢程式和服務設定程式的方法。
第6章 介紹了一-些對於規模日益增長的應用程式非常有用的元件,比如自動補全、加鎖、任務佇列、訊息傳遞以及檔案分發。
第7章 深入研究了一系列與搜尋有關的問題和解決方案,它們可能會改變讀者對於資料查詢和資料過濾的看法。
第8章 詳細地說明了如何構建一一個類似Twitter的社群網站,並給出了包括流API在內的整個網站後端實現。
第9章 討論了擴充套件Redis時會用到的記憶體優化技術,其中包括結構分片方法以及短結構的使用方法。
第10章 介紹了對Redis進行水平分片和主從複製的方法。當一臺伺服器不足以滿足需求的時候,這兩項特性可以提供更強勁的效能以及更多的可用記憶體。
第11章 介紹瞭如何通過Lua指令碼程式設計在伺服器端對Redis的功能進行擴充套件,並在某些場景下把Lua指令碼用作提升效能的方法。
附錄A 介紹瞭如何在Linux、Os X和Windows這3種不同的平臺上安裝Redis、Python 以及Python的Redis使用者端。
附錄B 是一個參考手冊,它列出了各種在使用Redis時可能會有用的資源,比如本書用到的Python語法結構的檔案,一些Redis使用案例,用於完成各種任務的第三方Redis庫,諸如此類。
這份Redis實戰筆記總共為303頁,需要完整版的朋友,可以以下方式來獲取!!
本書封面插圖的標題為「一介草民" ( A Man of the People ),這幅插圖取自19世紀法國再版的地區服飾風俗四卷組合( four-volume compendium of regional dress customs),作者是Sylvain Marechal。同樣地,在這個難以分辨不同計算機書籍的時代,作者希望將兩個世紀前豐富多彩的地區生活融入本書封面,以此來讚美計算機行業不斷創新和敢為人先的精神。