Redis教程(一):Redis簡介

來源:互聯網
上載者:User
一、簡介:

在過去的幾年中,NoSQL資料庫一度成為高並發、海量資料存放區解決方案的代名詞,與之相應的產品也呈現出雨後春筍般的生機。然而在眾多產品中能夠脫穎而出的卻屈指可數,如Redis、MongoDB、BerkeleyDB和CouchDB等。由於每種產品所擁有的特徵不同,因此它們的應用情境也存在著一定的差異,下面僅給出簡單的說明:

1). BerkeleyDB是一種極為流行的開源嵌入式資料庫,在更多情況下可用於儲存引擎,比如BerkeleyDB在被Oracle收購之前曾作為MySQL的儲存引擎,由此可以預見,該產品擁有極好的並發伸縮性,支援事務及嵌套事務,海量資料存放區等重要特徵,在用於儲存即時資料方面具有極高的可用價值。然而需要指出的是,該產品的Licence為GPL,這就意味著它並不是在所有情況下都是免費使用的。

2). 對MongoDB的定義為Oriented-Document資料庫伺服器,和BerkeleyDB不同的是該資料庫可以像其他關係型資料庫伺服器那樣獨立的運行並提供相關的資料服務。從該產品的官方文檔中我們可以獲悉,MongoDB主要適用於高並發的論壇或部落格網站,這些網站具有的主要特徵是並發訪問量高、多讀少寫、資料量大、邏輯關係簡單,以及文檔資料作為主要資料來源等。和BerkeleyDB一樣,該產品的License同為GPL。

3). Redis,典型的NoSQL資料庫伺服器,和BerkeleyDB相比,它可以作為服務程式獨立運行於自己的伺服器主機。在很多時候,人們只是將Redis視為Key/Value資料庫伺服器,然而事實並非如此,在目前的版本中,Redis除了Key/Value之外還支援List、Hash、Set和Ordered Set等資料結構,因此它的用途也更為寬泛。對於此種誤解,Redis官網也進行了相應的澄清。和以上兩種產品不同的是,Redis的License是Apache License,就目前而言,它是完全免費。

4). memcached,資料快取服務器。為什麼在這裡要給出該產品的解釋呢?很簡單,因為筆者認為它在使用方式上和Redis最為相似。畢竟這是一篇關於Redis的技術系列部落格,有鑒於此,我們將簡要的對比一下這兩個產品。首先說一下它們之間的最大區別,memcached只是提供了資料快取服務,一旦伺服器宕機,之前在記憶體中緩衝的資料也將全部消失,因此可以看出memcached沒有提供任何形式的資料持久化功能,而Redis則提供了這樣的功能。再有就是Redis提供了更為豐富的資料存放區結構,如Hash和Set。至於它們的相同點,主要有兩個,一是完全免費,再有就是它們的提供的命令形式極為接近。

二、Redis的優勢:

1). 和其他NoSQL產品相比,Redis的易用性極高,因此對於那些有類似產品使用經驗的開發人員來說,一兩天,甚至是幾個小時之後就可以利用Redis來搭建自己的平台了。
2). 在解決了很多通用性問題的同時,也為一些個人化問題提供了相關的解決方案,如索引引擎、統計排名、訊息佇列服務等。

三、目前版本中Redis存在的主要問題:

1). 在官方版本中沒有提供Windows平台的支援,發行的正式版本中只是支援類Unix和MacOSX平台。
2). 沒有提供叢集的支援,然而據官網所述,預計在2.6版本中會加入該特徵。
3). Publication/Subscription功能中,如果master宕機,slave無法自動提升為master。

四、和關係型資料庫的比較:

在目前版本(2.4.7)的Redis中,提供了對五種不同資料類型的支援,其中只有一種類型,既string類型可以被視為Key-Value結構,而其他的資料類型均有適用於各自特徵的應用情境,至於具體細節我們將會在該系列後面的部落格中予以說明。
相比於關係型資料庫,由於其儲存結構相對簡單,因此Redis並不能對複雜的邏輯關係提供很好的支援,然而在適用於Redis的情境中,我們卻可以由此而獲得效率上的顯著提升。即便如此,Redis還是為我們提供了一些資料庫應該具有的基礎概念,如:在同一串連中可以選擇開啟不同的資料庫,然而不同的是,Redis中的資料庫是通過數字來進行命名的,預設情況下開啟的資料庫為0。如果程式在運行過程中打算切換資料庫,可以使用Redis的select命令來開啟其他資料庫,如select 1,如果此後還想再切換回預設資料庫,只需執行select 0即可。
在資料存放區方面,Redis遵循了現有NoSQL資料庫的主流思想,即Key作為資料檢索的唯一標識,我們可以將其簡單的理解為關係型資料庫中索引的鍵,而Value則作為資料存放區的主要對象,其中每一個Value都有一個Key與之關聯,這就好比索引中物理資料在資料表中儲存的位置。在Redis中,Value將被視為二進位位元組流用於儲存任何格式的資料,如Json、XML和序列化對象的位元組流等,因此我們也可以將其想象為RDB中的BLOB類型欄位。由此可見,在進行資料查詢時,我們只能基於Key作為我們查詢的條件,當然我們也可以應用Redis中提供的一些技巧將Value作為其他資料的Key,這些知識我們都會在後面的部落格中予以介紹。

五、如何持久化記憶體資料:

預設情況下,Redis會參照當前資料庫中資料被修改的數量,在達到一定的閾值後會將資料庫的快照儲存到磁碟上,這一點我們可以通過設定檔來設定該閾值。通常情況下,我們也可以將Redis設定為定時儲存。如當有1000個以上的鍵資料被修改時,Redis將每隔60秒進行一次資料持久化操作。預設設定為,如果有9個或9個以下資料修改是,Redis將每15分鐘持久化一次。
從上面提到的方案中可以看出,如果採用該方式,Redis的運行時效率將會是非常高效的,既每當有新的資料修改發生時,僅僅是記憶體中的快取資料發生改變,而這樣的改變並不會被立即持久化到磁碟上,從而在絕大多數的修改操作中避免了磁碟IO的發生。然而事情往往是存在其兩面性的,在該方法中我們確實得到了效率上的提升,但是卻失去了資料可靠性。如果在記憶體快照被持久化到磁碟之前,Redis所在的伺服器出現宕機,那麼這些未寫入到磁碟的已修改資料都將丟失。為了保證資料的高可靠性,Redis還提供了另外一種資料持久化機制--Append模式。如果Redis伺服器被配置為該方式,那麼每當有資料修改發生時,都會被立即持久化到磁碟。

以上就是Redis教程(一):Redis簡介的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.