一、Redis的誕生 Redis創建者,出生於西西里島的義大利人(antirez)發明的,個人網站,http://invece.org。早年是系統管理員,2004-2006 年做嵌入式方面的工作,之後接觸 WEB,2007 年和朋友共同創建了一個網站 LLOOGG.com,併為瞭解決這個網站的負載問 ...
一、Redis的誕生
Redis創建者,出生於西西里島的義大利人(antirez)發明的,個人網站,http://invece.org。早年是系統管理員,2004-2006 年做嵌入式方面的工作,之後接觸 WEB,2007 年和朋友共同創建了一個網站 LLOOGG.com,併為瞭解決這個網站的負載問題而在 2009 年發明瞭 Redis。有關大數據數據倉庫問題,請看《傳統資料庫和數據倉庫》說到這個 LLOOGG.com 網站,我們來看看這個到底是個幹嘛的網站,LLOOGG.com網站是一個訪客信息追蹤網站,網站可以通過 javascript 腳本,將訪客的 IP 地址、所屬國家、閱覽信息、訪問頁面地址等數據傳送給 LLOOGG.com。
三個網站正在向 LLOOGG.com 發送它們的訪客瀏覽記錄
然後 LLOOGG.com 會將這些瀏覽數據通過 WEB 頁面實時地展示給用戶,並存儲起來最新的 5 到 10000 條瀏覽記錄以便進行查閱,就是說用戶可以設置想看最近的多少條。
這個就是 LLOOGG.com 的用戶界面,ps:Google 的 Analytics知道 2011 年才有了實時功能,所以說 LLOOGG.com 的實時反饋想法在當時 2007 年還是很有新意的。
LLOOGG 的運作方式
比如說這裡有三個網站,為了記錄每個被追蹤網站的瀏覽信息,LLOOGG.com 需要為每個被追蹤的網站創建一個列表(list),每個列表需要根據用戶的設置,儲存最新的 5到10000 條瀏覽記錄
各個網站發送的瀏覽記錄會分別進入相應的隊列
FIFO 機制,當列表的長度超過用戶指定的最大長度時,程式每向列表推入一條記錄,就需要從列表中彈出一條最舊的記錄,圖中展示比如用戶設置列表最大長度為 5
LLOOGG 怎麼引起負載問題的呢?
隨著 LLOOGG 的用戶越來越多,LLOOGG 要維護的列表數量也越來越多,要執行的推入和彈出操作也越來越多,當時 LLOOGG 當時使用 MYSQL 資料庫,而每次 MYSQL執行推入和彈出操作都要進行硬碟寫入和讀取,程式的性能嚴重受制於硬碟 I/O,很多操作都堆在那裡,然後網站整個就沒法運作了。
這個負載問題的根本原因就是這個硬碟 IO,所以 antirez 在不改變硬體的基礎上,通過提升列表操作的性能來解決負載問題,決定自己寫一個具有列表結構的記憶體資料庫原型。最重要的是數據存儲在記憶體而不是硬碟,所以程式的性能不會受到硬碟 IO 限制,可以以極快的速度執行針對列表的堆入和彈出操作。結果試驗,確實解決了 LLOOGG 當時
的負載問題,於是 antirez 使用 C 語言重寫了這個記憶體資料庫,並給它加上了持久化功能,這個就是 Redis 的誕生!
二、Redis特點
世界上有無數種資料庫,為什麼要使用 Redis 呢,我們來看看它的優點2.1獨特的鍵值對模型
我們知道很多資料庫只能處理一種數據結構:SQL資料庫----二維表格
Memcached----鍵值對資料庫,鍵值都是字元串
文檔資料庫(CouchDB、MongoDB)----由 JSON/BSON 組成的文檔
當然不是他們這些資料庫不好,而是一旦資料庫提供的數據結構並不適合去做某件事的話,程式寫起來就會非常的麻煩和不自然。
2.2數據結構豐富
Redis 雖然也是鍵值對資料庫,但是和 Memcached 不同的是,Redis 支持多種類型的數據結構,不僅可以是字元串,同時還提供散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)等數據結構。通過選用不同的數據結構,用戶可以使用 Redis 解決各式各樣的問題。
資料庫有兩種,一種硬碟資料庫,一種記憶體資料庫
硬碟是把值儲存在硬碟,典型的是 SQL 資料庫
在記憶體裡面就存儲一下索引,當硬碟資料庫想訪問硬碟的值時,它先在記憶體裡面找到索引,然後在找值,問題是什麼,在讀取和寫入硬碟的時候,如果讀寫比較多的時候,它會把硬碟 IO 堵死。
至於記憶體資料庫,它會直接把值放到記憶體裡面,記憶體資料庫就直接把值取到,風一樣的感覺,讀寫數據的時候都不會受到硬碟 IO 速度的限制,所以速度極快。