天天看點

【轉】NoSQL初探之人人都愛Redis:(1)Redis簡介與簡單安裝一、NoSQL的風生水起二、Redis的脫穎而出三、Redis在Windows上的安裝與配置四、小結參考文獻附件下載下傳

一、NoSQL的風生水起

【轉】NoSQL初探之人人都愛Redis:(1)Redis簡介與簡單安裝一、NoSQL的風生水起二、Redis的脫穎而出三、Redis在Windows上的安裝與配置四、小結參考文獻附件下載下傳

 1.1 後Web2.0時代的發展要求

  随着網際網路Web2.0網站的興起,傳統的關系資料庫在應付Web2.0網站,特别是超大規模和高并發的SNS類型的Web2.0純動态網站已經顯得力不從心,暴露了很多難以克服的問題:

  (1)對資料庫高并發讀寫的需求

  網站要根據使用者個性化資訊來實時生成動态頁面和提供動态資訊,是以基本上無法使用動态頁面靜态化技術,是以資料庫并發負載非常高,往往要達到每秒上萬次讀寫請求。關系資料庫應付上萬次SQL查詢還勉強頂得住,但是應付上萬次SQL寫資料請求,硬碟IO就已經無法承受了。

  (2)對海量資料的高效率存儲和通路的需求

  對于大型的SNS網站,每天使用者産生海量的使用者動态,以國外的Friendfeed為例,一個月就達到了2.5億條使用者動态,對于關系資料庫來說,在一張2.5億條記錄的表裡面進行SQL查詢,效率是極其低下乃至不可忍受的。

  (3)對資料庫的高可擴充性和高可用性的需求

  在基于Web的架構當中,資料庫是最難進行橫向擴充的,當一個應用系統的使用者量和通路量與日俱增的時候,你的資料庫卻沒有辦法像Web伺服器和應用伺服器那樣簡單的通過添加更多的硬體和服務節點來擴充性能和負載能力。對于很多需要提供7*24小時不間斷服務的網站來說,對資料庫系統進行更新和擴充是非常痛苦的事情,往往需要停機維護和資料遷移,為什麼資料庫不能通過不斷的添加伺服器節點來實作擴充呢?

  在上面提到的“三高”的需求面前,關系資料庫遇到了難以克服的障礙,而對于Web2.0網站來說,關系資料庫的很多主要特性卻往往無用武之地,例如:

  (1)資料庫事務一緻性需求

  很多Web實時系統并不要求嚴格的資料庫事務,對讀一緻性的要求很低,有些場合對寫一緻性要求也不高。是以資料庫事務管理成了資料庫高負載下一個沉重的負擔。

  (2)資料庫的寫實時性和讀實時性需求

  對關系資料庫來說,插入一條資料之後立刻查詢,是肯定可以讀出來這條資料的。并不要求這麼高的實時性。

  (3)對複雜的SQL查詢,特别是多表關聯查詢的需求

  任何大資料量的Web系統,都非常忌諱多個大表的關聯查詢,以及複雜的資料分析類型的複雜SQL報表查詢,特别是SNS類型的網站,從需求以及産品設計角度,就避免了這種情況的産生。往往更多的隻是單表的主鍵查詢,以及單表的簡單條件分頁查詢,SQL的功能被極大的弱化了。

【轉】NoSQL初探之人人都愛Redis:(1)Redis簡介與簡單安裝一、NoSQL的風生水起二、Redis的脫穎而出三、Redis在Windows上的安裝與配置四、小結參考文獻附件下載下傳

  是以,關系資料庫在這些越來越多的應用場景下顯得不那麼合适了,為了解決這類問題的非關系資料庫應運而生。NoSQL 是非關系型資料存儲的廣義定義。它打破了長久以來關系型資料庫與ACID理論大一統的局面。NoSQL 資料存儲不需要固定的表結構(例如以鍵值對存儲,它的結構不固定,每一個元組可以有不一樣的字段,每個元組可以根據需要增加一些自己的鍵值對,這樣就不會局限于固定的結構,可以減少一些時間和空間的開銷),通常也不存在連接配接操作。

 1.2 NoSQL無與倫比的特點

  在大資料存取上具備關系型資料庫無法比拟的性能優勢,例如:

  (1)易擴充

  NoSQL資料庫種類繁多,但是一個共同的特點都是去掉關系資料庫的關系型特性。資料之間無關系,這樣就非常容易擴充。也無形之間,在架構的層面上帶來了可擴充的能力。

  (2)大資料量,高性能

  NoSQL資料庫都具有非常高的讀寫性能,尤其在大資料量下,同樣表現優秀。這得益于它的無關系性,資料庫的結構簡單。

  (3)靈活的資料模型

  NoSQL無需事先為要存儲的資料建立字段,随時可以存儲自定義的資料格式。而在關系資料庫裡,增删字段是一件非常麻煩的事情。如果是非常大資料量的表,增加字段簡直就是一個噩夢。這點在大資料量的Web2.0時代尤其明顯。

  (4)高可用

  NoSQL在不太影響性能的情況,就可以友善的實作高可用的架構。比如Cassandra,HBase模型,通過複制模型也能實作高可用。

  綜上所述,NoSQL的非關系特性使其成為了後Web2.0時代的寵兒,助力大型Web2.0網站的再次起飛,是一項全新的資料庫革命性運動。

二、Redis的脫穎而出

【轉】NoSQL初探之人人都愛Redis:(1)Redis簡介與簡單安裝一、NoSQL的風生水起二、Redis的脫穎而出三、Redis在Windows上的安裝與配置四、小結參考文獻附件下載下傳

  随着應用對高性能需求的增加,NoSQL逐漸在各大名企的系統架構中生根發芽。時至今日,湧現出的NoSQL産品已經有很多種了,例如Membase、MongoDB、Apache Cassandra、CouchDB等。不過,在國内外網際網路巨頭例如社交巨頭新浪微網誌、傳媒巨頭Viacom及圖檔分享領域佼佼者Pinterest等名企都不約而同地采用了Redis作為其NoSQL資料庫的選擇,到底Redis是何方神聖呢?能讓如此多的名企為它而癡狂。

  按照官方的說法,Redis是一個開源的,使用C語言編寫,面向“鍵/值”(Key/Value)對類型資料的分布式NoSQL資料庫系統,特點是高性能,持久存儲,适應高并發的應用場景。是以,可以說Redis純粹為應用而産生,它是一個高性能的key-value資料庫,并且還提供了多種語言的API(包括我們的大C#)。那麼,也許我們會問:到底性能如何呢?以下是官方的bench-mark資料:

  測試完成了 50個并發執行 100000個請求。   設定和擷取的值是一個256位元組字元串。   Linux box是運作Linux 2.6,這是X3320 Xeon 2.5 ghz。   文本執行使用loopback接口(127.0.0.1)。   結果: 讀的速度是110000次/s,寫的速度是81000次/s 。(當然不同的伺服器配置性能也有所不同)。

  和Memcached類似,Redis支援存儲的value類型相對更多,包括string(字元串)、list(連結清單)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些資料類型都支援push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,Redis支援各種不同方式的排序。與Memcached一樣,為了保證效率,資料都是緩存在記憶體中。差別的是Redis會周期性的把更新的資料寫入磁盤或者把修改操作寫入追加的記錄檔案,并且在此基礎上實作了master-slave(主從)同步(資料可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器。)。

  是以,Redis的出現,很大程度補償了Memcached這類key/value存儲的不足,在部分場合可以對關系資料庫起到很好的補充作用。

三、Redis在Windows上的安裝與配置

  前面介紹了一大堆,現在開始真刀實幹!首先,肯定是安裝Redis,這裡我們選擇比較熟悉的Windows平台來進行安裝。既然是Windows平台,那麼肯定要選擇一個Windows版本的Redis安裝包(其實NoSQL大部分都是部署在Linux伺服器上得,什麼原因?大家都懂得,開源+免費=成熟的伺服器方案)。

  (1)進入GitHub的Redis相關包下載下傳頁面:https://github.com/MSOpenTech/redis

    Of course,這個位址也是可以的:https://github.com/dmajkic/redis/downloads

【轉】NoSQL初探之人人都愛Redis:(1)Redis簡介與簡單安裝一、NoSQL的風生水起二、Redis的脫穎而出三、Redis在Windows上的安裝與配置四、小結參考文獻附件下載下傳

  (2)選擇相應版本,我這裡選擇的是2.6的版本,點選Download ZIP按鈕進行下載下傳;

  (3)打開壓縮包,可以看到我們下載下傳的其實是一個完整的Redis-2.6的包,包含了bin、src等檔案夾,src是源碼,而bin則是編譯好的執行檔案,也是我們主要使用的東東。進入bin目錄,可以看到裡面又有兩個目錄,一個是32位作業系統使用的,另一個則是64位作業系統使用的。

【轉】NoSQL初探之人人都愛Redis:(1)Redis簡介與簡單安裝一、NoSQL的風生水起二、Redis的脫穎而出三、Redis在Windows上的安裝與配置四、小結參考文獻附件下載下傳

  (4)我所使用的是64位系統,是以我将redisbin64.zip拷貝出來,解壓後移動至我的D:/Redis目錄中,可以看到解壓後的内容包含以下的一些可執行exe檔案:

【轉】NoSQL初探之人人都愛Redis:(1)Redis簡介與簡單安裝一、NoSQL的風生水起二、Redis的脫穎而出三、Redis在Windows上的安裝與配置四、小結參考文獻附件下載下傳

  下面來看看這幾個可執行exe檔案都是幹嘛用的?

  ①redis-server.exe:服務程式,也是最最最核心的一個程式。說到底,Redis也就是我們伺服器系統上一直運作的一個服務甚至就是一個程序而已。 

  ②redis-check-dump.exe:本地資料庫檢查

  ③redis-check-aof.exe:更新日志檢查

  ④redis-benchmark.exe:性能測試,用以模拟同時由N個用戶端發送M個 SETs/GETs 查詢。上面所提到的測試結果就是使用的該程式來進行的。

  ⑤redis-cli.exe: 服務端開啟後,我們的用戶端就可以輸入各種指令測試了,例如GET、SET等操作;

  另外,将剛剛下載下傳的包裡邊的redis.conf預設配置檔案拷貝到工作目錄中(我的是D:/Redis),redis.conf主要是一些Redis的預設服務配置,包括預設端口号(一般預設6379)啊之類的配置。

【轉】NoSQL初探之人人都愛Redis:(1)Redis簡介與簡單安裝一、NoSQL的風生水起二、Redis的脫穎而出三、Redis在Windows上的安裝與配置四、小結參考文獻附件下載下傳

  (5)既然我們知道了redis-server.exe是最核心的一個程式,那麼我們就首先來将它開啟。這裡需要在Windows的指令行界面中來開啟,首先在運作視窗輸入cmd進入指令視窗,使用cd指令切換到指定的目錄(我是将剛剛解壓的檔案放在了D:/Redis檔案夾下)

【轉】NoSQL初探之人人都愛Redis:(1)Redis簡介與簡單安裝一、NoSQL的風生水起二、Redis的脫穎而出三、Redis在Windows上的安裝與配置四、小結參考文獻附件下載下傳

  (6)最後就是驚心動魄地開啟Redis的服務了,輸入一句簡單的指令:redis-server.exe redis.conf

【轉】NoSQL初探之人人都愛Redis:(1)Redis簡介與簡單安裝一、NoSQL的風生水起二、Redis的脫穎而出三、Redis在Windows上的安裝與配置四、小結參考文獻附件下載下傳

  這裡需要注意的是:開啟Redis服務後,指令行視窗不要關閉,一旦關閉,Redis服務也會相應關閉。是以,我們一般會将其改為Windows服務,并且設定為開機自動啟動,就像我們資料庫伺服器中的SQL Server服務和Web伺服器中的IIS服務一樣。

  (7)究竟我們的Redis安裝好了沒呢?我們可以通過新打開(記得是新打開一個,而不是将原來那個關閉了)一個cmd視窗使用redis-cli.exe來測試一下:redis-cli.exe -h 伺服器IP –p 端口

【轉】NoSQL初探之人人都愛Redis:(1)Redis簡介與簡單安裝一、NoSQL的風生水起二、Redis的脫穎而出三、Redis在Windows上的安裝與配置四、小結參考文獻附件下載下傳

  (8)既然每次都需要在指令視窗中開啟Redis服務不爽,那我們就動手将其改為Windows服務,讓它自動啟動。通過在網上查找,我在CSDN找到了一個批處理檔案和一個RedisService的可執行檔案,并将這兩個檔案拷貝到指定的Redis目錄(我的是D:/Redis):

【轉】NoSQL初探之人人都愛Redis:(1)Redis簡介與簡單安裝一、NoSQL的風生水起二、Redis的脫穎而出三、Redis在Windows上的安裝與配置四、小結參考文獻附件下載下傳

  其中,install-service這個批處理檔案的代碼如下:

@echo off
set cur_path=%cd%
sc create redis-instance binpath= "\"%cur_path%\RedisService.exe\" %cur_path%\redis.conf" start= "auto" DisplayName= "Redis"      

  意思是在我們的Windows中建立一個Redis的服務執行個體,指定要啟動的程式路徑與配置檔案路徑。這裡需要注意的是:RedisService是另外的一個exe,不是我們剛剛下載下傳下來就有的,這個RedisService.exe的下載下傳位址為:http://pan.baidu.com/s/1sjrvmTf。啟動模式設定為auto代表自動啟動,顯示的服務名稱為Redis。這樣,一個bat檔案就做好了,點選運作之後,一個Redis的Windows服務也出現在了我們的Windows服務清單中,如下圖所示:

【轉】NoSQL初探之人人都愛Redis:(1)Redis簡介與簡單安裝一、NoSQL的風生水起二、Redis的脫穎而出三、Redis在Windows上的安裝與配置四、小結參考文獻附件下載下傳

四、小結

  随着新浪、趕集這些大型網站同一時刻的通路量逐漸飙升,但它們卻能做到讓使用者順利的通路,運用的就是Redis的資料優化處理技術。是以,Redis經過了各大名企的考驗,是一個高性能的NoSQL資料庫,具有多種實用的用途。那麼,我們.Net開發者是否可以借助Redis解決日常開發中遇到的高并發的問題呢,答案是肯定的。下一篇,我們會熟悉一下Redis為我們.Net開發者提供的API,以及Redis中提供的常見的資料類型(多種)等等。最後,衷心感謝本文的參考文獻作者,特别是傳智播客的王承偉老師,本文是基于其釋出的公開課視訊學習整理而成,感謝其提供了這麼好的公開課教程!

參考文獻

(1)傳智播客Redis公開課,王承偉主講,http://bbs.itcast.cn/thread-26525-1-1.html

(2)NoSQL百度百科,http://baike.baidu.com/view/2677528.htm

(3)孫立,《NoSQL開篇—為什麼使用NoSQL》,http://www.infoq.com/cn/news/2011/01/nosql-why/

(4)Redis百度百科,http://baike.baidu.com/view/4595959.htm

(5)Ruthless,《Windows下安裝Redis》,http://www.cnblogs.com/linjiqin/archive/2013/05/27/3101694.html

(6)張善友,《在Windows上以服務方式運作Redis》,http://www.cnblogs.com/shanyou/archive/2013/01/17/redis-on-windows.html

附件下載下傳

(1)Redis-2.6服務包:http://pan.baidu.com/s/1dDEKojJ

(2)Redis注冊Windows服務的批處理檔案:http://pan.baidu.com/s/1jGJtNXs

(3)Redis注冊Windows服務的啟動程式(RedisServcie.exe):http://pan.baidu.com/s/1sjrvmTf

 (4)Redis Desktop Manager 下載下傳位址 http://redisdesktop.com/download

轉自:http://www.cnblogs.com/edisonchou/p/3821228.html

轉載于:https://www.cnblogs.com/yunspider/p/4384598.html