国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
NoSQL初探之人人都愛Redis:(1)Redis簡介與簡單安裝

一、NoSQL的風(fēng)生水起

 1.1 后Web2.0時代的發(fā)展要求

  隨著互聯(lián)網(wǎng)Web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付Web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的Web2.0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題:

  (1)對數(shù)據(jù)庫高并發(fā)讀寫的需求

  網(wǎng)站要根據(jù)用戶個性化信息來實時生成動態(tài)頁面和提供動態(tài)信息,所以基本上無法使用動態(tài)頁面靜態(tài)化技術(shù),因此數(shù)據(jù)庫并發(fā)負載非常高,往往要達到每秒上萬次讀寫請求。關(guān)系數(shù)據(jù)庫應(yīng)付上萬次SQL查詢還勉強頂?shù)米。菓?yīng)付上萬次SQL寫數(shù)據(jù)請求,硬盤IO就已經(jīng)無法承受了。

 ?。?)對海量數(shù)據(jù)的高效率存儲和訪問的需求

  對于大型的SNS網(wǎng)站,每天用戶產(chǎn)生海量的用戶動態(tài),以國外的Friendfeed為例,一個月就達到了2.5億條用戶動態(tài),對于關(guān)系數(shù)據(jù)庫來說,在一張2.5億條記錄的表里面進行SQL查詢,效率是極其低下乃至不可忍受的。

  (3)對數(shù)據(jù)庫的高可擴展性和高可用性的需求

  在基于Web的架構(gòu)當(dāng)中,數(shù)據(jù)庫是最難進行橫向擴展的,當(dāng)一個應(yīng)用系統(tǒng)的用戶量和訪問量與日俱增的時候,你的數(shù)據(jù)庫卻沒有辦法像Web服務(wù)器和應(yīng)用服務(wù)器那樣簡單的通過添加更多的硬件和服務(wù)節(jié)點來擴展性能和負載能力。對于很多需要提供7*24小時不間斷服務(wù)的網(wǎng)站來說,對數(shù)據(jù)庫系統(tǒng)進行升級和擴展是非常痛苦的事情,往往需要停機維護和數(shù)據(jù)遷移,為什么數(shù)據(jù)庫不能通過不斷的添加服務(wù)器節(jié)點來實現(xiàn)擴展呢?

  在上面提到的“三高”的需求面前,關(guān)系數(shù)據(jù)庫遇到了難以克服的障礙,而對于Web2.0網(wǎng)站來說,關(guān)系數(shù)據(jù)庫的很多主要特性卻往往無用武之地,例如:

 ?。?)數(shù)據(jù)庫事務(wù)一致性需求

  很多Web實時系統(tǒng)并不要求嚴格的數(shù)據(jù)庫事務(wù),對讀一致性的要求很低,有些場合對寫一致性要求也不高。因此數(shù)據(jù)庫事務(wù)管理成了數(shù)據(jù)庫高負載下一個沉重的負擔(dān)。

 ?。?)數(shù)據(jù)庫的寫實時性和讀實時性需求

  對關(guān)系數(shù)據(jù)庫來說,插入一條數(shù)據(jù)之后立刻查詢,是肯定可以讀出來這條數(shù)據(jù)的。并不要求這么高的實時性。

 ?。?)對復(fù)雜的SQL查詢,特別是多表關(guān)聯(lián)查詢的需求

  任何大數(shù)據(jù)量的Web系統(tǒng),都非常忌諱多個大表的關(guān)聯(lián)查詢,以及復(fù)雜的數(shù)據(jù)分析類型的復(fù)雜SQL報表查詢,特別是SNS類型的網(wǎng)站,從需求以及產(chǎn)品設(shè)計角度,就避免了這種情況的產(chǎn)生。往往更多的只是單表的主鍵查詢,以及單表的簡單條件分頁查詢,SQL的功能被極大的弱化了。

  因此,關(guān)系數(shù)據(jù)庫在這些越來越多的應(yīng)用場景下顯得不那么合適了,為了解決這類問題的非關(guān)系數(shù)據(jù)庫應(yīng)運而生。NoSQL 是非關(guān)系型數(shù)據(jù)存儲的廣義定義。它打破了長久以來關(guān)系型數(shù)據(jù)庫與ACID理論大一統(tǒng)的局面。NoSQL 數(shù)據(jù)存儲不需要固定的表結(jié)構(gòu)(例如以鍵值對存儲,它的結(jié)構(gòu)不固定,每一個元組可以有不一樣的字段,每個元組可以根據(jù)需要增加一些自己的鍵值對,這樣就不會局限于固定的結(jié)構(gòu),可以減少一些時間和空間的開銷),通常也不存在連接操作。

 1.2 NoSQL無與倫比的特點

  在大數(shù)據(jù)存取上具備關(guān)系型數(shù)據(jù)庫無法比擬的性能優(yōu)勢,例如:

  (1)易擴展

  NoSQL數(shù)據(jù)庫種類繁多,但是一個共同的特點都是去掉關(guān)系數(shù)據(jù)庫的關(guān)系型特性。數(shù)據(jù)之間無關(guān)系,這樣就非常容易擴展。也無形之間,在架構(gòu)的層面上帶來了可擴展的能力。

 ?。?)大數(shù)據(jù)量,高性能

  NoSQL數(shù)據(jù)庫都具有非常高的讀寫性能,尤其在大數(shù)據(jù)量下,同樣表現(xiàn)優(yōu)秀。這得益于它的無關(guān)系性,數(shù)據(jù)庫的結(jié)構(gòu)簡單。

 ?。?)靈活的數(shù)據(jù)模型

  NoSQL無需事先為要存儲的數(shù)據(jù)建立字段,隨時可以存儲自定義的數(shù)據(jù)格式。而在關(guān)系數(shù)據(jù)庫里,增刪字段是一件非常麻煩的事情。如果是非常大數(shù)據(jù)量的表,增加字段簡直就是一個噩夢。這點在大數(shù)據(jù)量的Web2.0時代尤其明顯。

  (4)高可用

  NoSQL在不太影響性能的情況,就可以方便的實現(xiàn)高可用的架構(gòu)。比如Cassandra,HBase模型,通過復(fù)制模型也能實現(xiàn)高可用。

  綜上所述,NoSQL的非關(guān)系特性使其成為了后Web2.0時代的寵兒,助力大型Web2.0網(wǎng)站的再次起飛,是一項全新的數(shù)據(jù)庫革命性運動。

二、Redis的脫穎而出

  隨著應(yīng)用對高性能需求的增加,NoSQL逐漸在各大名企的系統(tǒng)架構(gòu)中生根發(fā)芽。時至今日,涌現(xiàn)出的NoSQL產(chǎn)品已經(jīng)有很多種了,例如Membase、MongoDB、Apache Cassandra、CouchDB等。不過,在國內(nèi)外互聯(lián)網(wǎng)巨頭例如社交巨頭新浪微博、傳媒巨頭Viacom及圖片分享領(lǐng)域佼佼者Pinterest等名企都不約而同地采用了Redis作為其NoSQL數(shù)據(jù)庫的選擇,到底Redis是何方神圣呢?能讓如此多的名企為它而癡狂。

  按照官方的說法,Redis是一個開源的,使用C語言編寫,面向“鍵/值”(Key/Value)對類型數(shù)據(jù)的分布式NoSQL數(shù)據(jù)庫系統(tǒng),特點是高性能持久存儲,適應(yīng)高并發(fā)的應(yīng)用場景。因此,可以說Redis純粹為應(yīng)用而產(chǎn)生,它是一個高性能的key-value數(shù)據(jù)庫,并且還提供了多種語言的API(包括我們的大C#)。那么,也許我們會問:到底性能如何呢?以下是官方的bench-mark數(shù)據(jù):

  測試完成了50個并發(fā)執(zhí)行100000個請求。
  設(shè)置和獲取的值是一個256字節(jié)字符串。
  Linux box是運行Linux 2.6,這是X3320 Xeon 2.5 ghz。
  文本執(zhí)行使用loopback接口(127.0.0.1)。
  結(jié)果:讀的速度是110000次/s,寫的速度是81000次/s 。(當(dāng)然不同的服務(wù)器配置性能也有所不同)。

  和Memcached類似,Redis支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎(chǔ)上,Redis支持各種不同方式的排序。與Memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是Redis會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實現(xiàn)了master-slave(主從)同步(數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步,從服務(wù)器可以是關(guān)聯(lián)其他從服務(wù)器的主服務(wù)器。)。

  因此,Redis的出現(xiàn),很大程度補償了Memcached這類key/value存儲的不足,在部分場合可以對關(guān)系數(shù)據(jù)庫起到很好的補充作用

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

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

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

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

  (2)選擇相應(yīng)版本,我這里選擇的是2.6的版本,點擊Download ZIP按鈕進行下載;

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

  (4)我所使用的是64位系統(tǒng),所以我將redisbin64.zip拷貝出來,解壓后移動至我的D:/Redis目錄中,可以看到解壓后的內(nèi)容包含以下的一些可執(zhí)行exe文件:

  下面來看看這幾個可執(zhí)行exe文件都是干嘛用的?

 ?、?strong>redis-server.exe:服務(wù)程序,也是最最最核心的一個程序。說到底,Redis也就是我們服務(wù)器系統(tǒng)上一直運行的一個服務(wù)甚至就是一個進程而已。 

  ②redis-check-dump.exe:本地數(shù)據(jù)庫檢查

 ?、踨edis-check-aof.exe:更新日志檢查

 ?、躵edis-benchmark.exe:性能測試,用以模擬同時由N個客戶端發(fā)送M個 SETs/GETs 查詢。上面所提到的測試結(jié)果就是使用的該程序來進行的。

 ?、輗edis-cli.exe: 服務(wù)端開啟后,我們的客戶端就可以輸入各種命令測試了,例如GET、SET等操作;

  另外,將剛剛下載的包里邊的redis.conf默認配置文件拷貝到工作目錄中(我的是D:/Redis),redis.conf主要是一些Redis的默認服務(wù)配置,包括默認端口號(一般默認6379)啊之類的配置。

 ?。?)既然我們知道了redis-server.exe是最核心的一個程序,那么我們就首先來將它開啟。這里需要在Windows的命令行界面中來開啟,首先在運行窗口輸入cmd進入命令窗口,使用cd命令切換到指定的目錄(我是將剛剛解壓的文件放在了D:/Redis文件夾下)

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

  這里需要注意的是:開啟Redis服務(wù)后,命令行窗口不要關(guān)閉,一旦關(guān)閉,Redis服務(wù)也會相應(yīng)關(guān)閉。因此,我們一般會將其改為Windows服務(wù),并且設(shè)置為開機自動啟動,就像我們數(shù)據(jù)庫服務(wù)器中的SQL Server服務(wù)和Web服務(wù)器中的IIS服務(wù)一樣。

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

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

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

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

  意思是在我們的Windows中創(chuàng)建一個Redis的服務(wù)實例,指定要啟動的程序路徑與配置文件路徑。這里需要注意的是:RedisService是另外的一個exe,不是我們剛剛下載下來就有的,這個RedisService.exe的下載地址為:http://pan.baidu.com/s/1sjrvmTf。啟動模式設(shè)置為auto代表自動啟動,顯示的服務(wù)名稱為Redis。這樣,一個bat文件就做好了,點擊運行之后,一個Redis的Windows服務(wù)也出現(xiàn)在了我們的Windows服務(wù)列表中,如下圖所示:

四、小結(jié)

  隨著新浪、趕集這些大型網(wǎng)站同一時刻的訪問量逐步飆升,但它們卻能做到讓用戶順利的訪問,運用的就是Redis的數(shù)據(jù)優(yōu)化處理技術(shù)。因此,Redis經(jīng)過了各大名企的考驗,是一個高性能的NoSQL數(shù)據(jù)庫,具有多種實用的用途。那么,我們.Net開發(fā)者是否可以借助Redis解決日常開發(fā)中遇到的高并發(fā)的問題呢,答案是肯定的。下一篇,我們會熟悉一下Redis為我們.Net開發(fā)者提供的API,以及Redis中提供的常見的數(shù)據(jù)類型(多種)等等。最后,衷心感謝本文的參考文獻作者,特別是傳智播客的王承偉老師,本文是基于其發(fā)布的公開課視頻學(xué)習(xí)整理而成,感謝其提供了這么好的公開課教程!

參考文獻

(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上以服務(wù)方式運行Redis》,http://www.cnblogs.com/shanyou/archive/2013/01/17/redis-on-windows.html

附件下載

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

(2)Redis注冊Windows服務(wù)的批處理文件:http://pan.baidu.com/s/1jGJtNXs

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

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【JavaWeb】96:Redis入門
企業(yè)打開Redis的正確方式,來自阿里云云數(shù)據(jù)庫團隊的解讀
關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫有什么區(qū)別,mongdb和redis怎么選擇,mongdb優(yōu)勢在哪?
NoSQL還是SQL?這一篇講清楚
搞懂?dāng)?shù)據(jù)庫看這篇就夠了!
NoSQL數(shù)據(jù)庫探討 - 為什么要用非關(guān)系數(shù)據(jù)庫?
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服