NodeJS系列~第三個(ge)小(xiao)例子(zi),NodeJs與Redis實現高并發的隊(dui)列存儲(chu)
眾所周知
redis量個強大的緩存組件,可以部署(shu)在(zai)win32和linux環境之上,它有五(wu)大存儲結構,其中有一種為列表list,它可以實(shi)現quene和stack的功(gong)能,即隊列和堆棧的功(gong)能。
redis相關文章,可以看我的相關博文《Redis學習筆記~目錄》,redis實現消息隊列,可以看我的《Redis實現消息隊列比MSMQ更方便》
node-redis-client相關下(xia)載地址為://github.com/fictorial/redis-node-client
說一下它們工作流程:
node之前
client->IIS/apache服務(wu)器->2M Thread->redis server(windows/linux)
node之后
client->Node.JS(event driven)->redis server(windows/linux)
我(wo)們可以看到(dao),nodeJS出現(xian)之后,我(wo)們在與(yu)redis通(tong)訊時,不(bu)走原來(lai)的(de)那種線(xian)程機制,而是走事(shi)件驅動,原來(lai)的(de)IO瓶頸沒(mei)有了(le),原來(lai)8G內(nei)存支持4000個(ge)并(bing)發量,現(xian)在不(bu)存在了(le),看到(dao)了(le)這些信息,我(wo)想,對于高(gao)并(bing)發模塊,咱(zan)們沒(mei)有理由不(bu)使(shi)用(yong)nodeJS作為http服務器(qi)了(le)吧,呵呵。
說干就干()
首先找到\redis-node-client-master\examples目錄,運行(xing)命令node publisher.js
這時打開你的(de)redis服務redis-server,我們用的(de)是windows版的(de)
這時(shi),你的(de)redis-server將到監(jian)視(shi)到由node.js發過(guo)來的(de)數據,如圖
下面我們再來看一下通(tong)過客戶端訪問(wen)node.js進行redis存儲的過程
如(ru)果你的(de)電腦處于聯網狀態,那么安(an)(an)裝(zhuang)可(ke)(ke)以(yi)把(ba)redis-node以(yi)npm模塊的(de)形式安(an)(an)裝(zhuang)到node中,以(yi)后(hou)在引(yin)用時直接使用require("redis")就可(ke)(ke)以(yi)了(le),不需要寫(xie)相對路徑了(le),呵呵,安(an)(an)裝(zhuang)它(ta)的(de)方法(fa)如(ru)下:
npm install redis
npm install hiredis redis
這時,如果(guo)安裝(zhuang)成功,就可(ke)以做(zuo)實例(li)了,呵呵!注意,我們的(de)(de)npm install redis這種(zhong)安裝(zhuang)模(mo)(mo)塊(kuai)(kuai)的(de)(de)命令,是把模(mo)(mo)塊(kuai)(kuai)安裝(zhuang)到當前目(mu)錄的(de)(de),即你的(de)(de)工(gong)作項(xiang)目(mu)如果(guo)需要(yao)redis,需要(yao)在(zai)工(gong)作項(xiang)目(mu)中進行安裝(zhuang),如果(guo)你的(de)(de)工(gong)作項(xiang)目(mu)目(mu)錄是c:\noderedis,那么(me)安裝(zhuang)模(mo)(mo)塊(kuai)(kuai)后,你的(de)(de)目(mu)
錄會多一個(ge)node_modules文件夾,如圖:
安裝的過程如圖:
下面我們(men)寫一個實例,用來向redis服(fu)務(wu)器發(fa)set和(he)hset串,然(ran)后再把redis服(fu)務(wu)器里所有的鍵名(ming)都讀出(chu)來
var redis = require("redis"); var client = redis.createClient(); client.on("error", function (err) { console.log("Error " + err); }); client.set("string key", "string val", redis.print); client.hset("hash key", "hashtest 1", "some value", redis.print); client.hset(["hash key", "hashtest 2", "some other value"], redis.print); client.hkeys("hash key", function (err, replies) { console.log(replies.length + " replies:"); replies.forEach(function (reply, i) { console.log(" " + i + ": " + reply); }); client.quit(); });
運行結果如下:
OK,這說明,我們的redis-node客戶端已經和redis服務器可以正常通訊了,呵呵,下一講中,我們將學習,通過客戶端向node發post請求,將數據包通過node發到redis,敬請期待!