資源描述:
《node.js中使用redis數(shù)據(jù)庫(kù)的正確姿勢(shì)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、Node.js中使用redis數(shù)據(jù)庫(kù)的正確姿勢(shì)Redis是一個(gè)常用的Nosql數(shù)據(jù)庫(kù),一般用來(lái)代替Memcached做緩存服務(wù),同時(shí)它也支持?jǐn)?shù)據(jù)的持久化,有著比較廣泛的應(yīng)用場(chǎng)景。在Java中使用redis我們已經(jīng)比較熟悉了,那么在node.js和koa.js框架中使用Redis的正確姿勢(shì)是怎樣的呢?Redis是完全開(kāi)源免費(fèi)的,遵守BSD協(xié)議,是一個(gè)高性能的key-value數(shù)據(jù)庫(kù)。Redis與其他key-value緩存產(chǎn)品有以下三個(gè)特點(diǎn):*Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤(pán)中,重
2、啟的時(shí)候可以再次加載進(jìn)行使用。*Redis不僅僅支持簡(jiǎn)單的key-value類(lèi)型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。*Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。Node.js已經(jīng)有很多redis相關(guān)的庫(kù),我在npm.org上搜了下大概有十幾個(gè)吧,其中經(jīng)常使用的redis,co-redis。由于我用koa做web框架,因此就直接用了koa-redis。這篇文章涉及koa.js,yield生成器和Promise相關(guān)的知識(shí),需要先對(duì)這些概念有一定
3、的認(rèn)識(shí)。下面介紹下redis和koa.js相關(guān)的操作吧,我是在Mac下操作的。1.安裝redis,并啟動(dòng)客戶(hù)端和服務(wù)器端brewinstallredis啟動(dòng)服務(wù)器端redis-server啟動(dòng)客戶(hù)端redis-cli127.0.0.1:6379[1]>select0OK127.0.0.1:6379>keys*(emptylistorset)127.0.0.1:6379>2.安裝node.js和koa.js,node的安裝這里就不講了,通過(guò)brewinstall就可以。npminstallkoaredi
4、skoa-redis可以看到koa-redis已經(jīng)依賴(lài)了co-redis,es6-promisify等庫(kù)`--koa-redis@2.1.2+--co-redis@2.1.1
5、`--es6-promisify@4.1.0
6、`--es6-promise@3.2.1`--hiredis@0.5.0+--bindings@1.2.1`--nan@2.4.03.koa.js操作redis數(shù)據(jù)這塊是本文重點(diǎn),由于官方的文檔和例子不太詳細(xì),不熟悉node的同學(xué)折騰起來(lái)會(huì)比較累,所以本文提供了一個(gè)比較完整的例子。具
7、體代碼里面注釋已經(jīng)寫(xiě)的比較清楚了。varsession=require('koa-generic-session');varredisStore=require('koa-redis');varkoa=require('koa');varredis=require('redis');//注意:client默認(rèn)是異步callback方式調(diào)用;//store.client是經(jīng)過(guò)了co-redis包裝,返回Promise,在koa里面用yield異步編程比較方便varclient=redis.creawww
8、.shanxiwang.netteClient(6379,"172.19.65.240");varapp=koa();app.keys=['keys','keykeys'];//varoption={host:"172.19.65.240",db:1};varoptions={client:client,db:1};varstore=redisStore(options);app.use(session({store:store}));app.use(function*(){switch(this.p
9、ath){case'/get':get.call(this);break;case'/testKV'://保存keyvalueif(this.query.adminId){yieldstore.client.set("test1",this.query.adminId);}//同步讀取keyvaluethis.body=yieldstore.client.get("test1");break;case'/testHM'://操作hashmapvarresult=yieldstore.client.hm
10、set("hosts","mjr","123","another","23","home","1234");console.log(result);varobj=yieldstore.client.hgetall("hosts")console.dir(obj);www.sm136.com//獲取hashmapkey的值this.body=yieldstore.client.hget("hosts","home");//保存hashmap,使用默認(rèn)的ca