Redis簡介

Redis簡介

NoSQL是什麼意思?

  NoSQL意味着不僅僅是SQL,還意味着在設計一個軟件解決方案或產品時,可以根據需求有一個以上更多選擇的存儲機制,。 NoSQL是一個新數據庫標籤(# NoSQL)。 NoSQL崛起的最重要的結果是多種範式的持久機制出現。 NoSQL沒有約定俗成的定義,常見觀點如下:

  • 不使用關係模型
  • 在集羣上運行良好
  • 主要是開源的
  • 適合構建21世紀Web應用
  • 非模式化

爲什麼要用NoSQL數據庫

應用程序規模的變大

網絡應用程序的規模日漸變大,我們需要儲存更多的數據、服務更多的用戶以及需求更多的計算能力。爲了應對這種情形,我們需要不停的擴展。擴展分爲兩類:一種是縱向擴展,即購買更好的機器,更多的磁盤、更多的內存等等;另一種是橫向擴展,即購買更多的機器組成集羣。在巨大的規模下,縱向擴展發揮的作用並不是很大。首先單機器性能提升需要鉅額的開銷並且有着性能的上限,在Google和Facebook這種規模下,永遠不可能使用一臺機器支撐所有的負載。鑑於這種情況,我們需要新的數據庫,因爲關係數據庫並不能很好的運行在集羣上。不錯你也可能會去搭建關係數據庫集羣,但是他們使用的是共享存儲,這並不是我們想要的類型。於是就有了以Google、Facebook、Amazon這些試圖處理更多傳輸所引領的NoSQL紀元。

互聯網作爲一個平臺的崛起也創建了一個至關重要的變化因素:其數據存儲需要支持大量數據在集羣上運行。

  而關係數據庫的設計並不能在集羣上有效運行。

數據庫分類

    1、關係型數據庫

    2、非關係型數據庫

 NoSQL是以key-value形式存儲,和傳統的關係型數據庫不一樣,不一定遵循傳統數據庫的一些基本要求,比如:遵循Sql標準,ACID屬性、表結構特性等等。分關係型數據庫的特點如下:非關係型的、分佈式的、開源的、水平可以擴展的。

 

NoSQL數據庫的類型

NoSQL可以大體上分爲4個種類:Key-value、Document-Oriented、Column-Family Databases以及 Graph-Oriented Databases。下面就一覽這些類型的特性:

鍵值(Key-Value)存儲數據庫

這一類數據庫主要會使用到一個哈希表,這個表中有一個特定的鍵和一個指針指向特定的數據。Key/value模型對於IT系統來說的優勢在於簡單、易部署。但是如果DBA只對部分值進行查詢或更新的時候,Key/value就顯得效率低下了。 舉例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.

列存儲數據庫。

這部分數據庫通常是用來應對分佈式存儲的海量數據。鍵仍然存在,但是它們的特點是指向了多個列。這些列是由列家族來安排的。如:Cassandra, HBase, Riak.

文檔型數據庫

文檔型數據庫的靈感是來自於Lotus Notes辦公軟件的,而且它同第一種鍵值存儲相類似。該類型的數據模型是版本化的文檔,半結構化的文檔以特定的格式存儲,比如JSON。文檔型數據庫可 以看作是鍵值數據庫的升級版,允許之間嵌套鍵值。而且文檔型數據庫比鍵值數據庫的查詢效率更高。如:CouchDB, MongoDb. 國內也有文檔型數據庫SequoiaDB,已經開源。

圖形(Graph)數據庫

圖形結構的數據庫同其他行列以及剛性結構的SQL數據庫不同,它是使用靈活的圖形模型,並且能夠擴展到多個服務器上。NoSQL數據庫沒有標準的查詢語言(SQL),因此進行數據庫查詢需要制定數據模型。許多NoSQL數據庫都有REST式的數據接口或者查詢API。如:Neo4J, InfoGrid, Infinite Graph.

NoSQL數據庫在以下的這幾種情況下比較適用:1、數據模型比較簡單;2、需要靈活性更強的IT系統;3、對數據庫性能要求較高;4、不需要高度的數據一致性;5、對於給定key,比較容易映射覆雜值的環境。

 

NoSQL使用場景:

    1、對數據高併發的讀寫,可以使用NoSQL類型數據庫。

    2、對海量數據的高效率的存儲和訪問,可以使用NoSQL類型數據庫。

    3、對數據的高可擴展性和高可用性要求比較高的也可以使用NoSQL類型數據庫。

Redis概要

Redis是一個開源的使用ANSI C語言編寫、遵守BSD協議、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。它通常被稱爲數據結構服務器,因爲值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets)和有序集合(sorted sets)等類型。

redis是一個key-value存儲系統。它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。爲了保證效率,數據都是緩存在內存中。爲了可靠性,redis會週期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。

Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。這使得Redis可執行單層樹複製。存盤可以有意無意的對數據進行寫操作。由於完全實現了發佈/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道並接收主服務器完整的消息發佈記錄。同步對讀取操作的可擴展性和數據冗餘很有幫助。


    redis的優點如下:

    (1) 速度快,因爲數據存在內存中,類似於HashMap,HashMap的優勢就是查找和操作的時間複雜度都是O(1)

    (2) 支持豐富數據類型,支持string,list,set,sorted set,hash

    (3) 支持事務,操作都是原子性,所謂的原子性就是對數據的更改要麼全部執行,要麼全部不執行

    (4) 豐富的特性:可用於緩存,消息,按key設置過期時間,過期後將會自動刪除

    (5) 支持主從複製,主機會自動將數據同步到從機,可以進行讀寫分離。

    (6)支持數據持久化,支持AOF和RDB兩種持久化方式

缺點:

Redis不具備自動容錯和恢復功能,主機從機的宕機都會導致前端部分讀寫請求失敗,需要等待機器重啓或者手動切換前端的IP才能恢復。

主機宕機,宕機前有部分數據未能及時同步到從機,切換IP後還會引入數據不一致的問題,降低了系統的可用性。

redis的主從複製採用全量複製,複製過程中主機會fork出一個子進程對內存做一份快照,並將子進程的內存快照保存爲文件發送給從機,這一過程需要確保主機有足夠多的空餘內存。若快照文件較大,對集羣的服務能力會產生較大的影響,而且複製過程是在從機新加入集羣或者從機和主機網絡斷開重連時都會進行,也就是網絡波動都會造成主機和從機間的一次全量的數據複製,這對實際的系統運營造成了不小的麻煩。

Redis較難支持在線擴容,在集羣容量達到上限時在線擴容會變得很複雜。爲避免這一問題,運維人員在系統上線時必須確保有足夠的空間,這對資源造成了很大的浪費。

       

發佈了65 篇原創文章 · 獲贊 34 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章