资源描述:
《node.js中使用redis数据库的正确姿势》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Node.js中使用redis数据库的正确姿势Redis是一个常用的Nosql数据库,一般用来代替Memcached做缓存服务,同时它也支持数据的持久化,有着比较广泛的应用场景。在Java中使用redis我们已经比较熟悉了,那么在node.js和koa.js框架中使用Redis的正确姿势是怎样的呢?Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis与其他key-value缓存产品有以下三个特点:*Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重
2、启的时候可以再次加载进行使用。*Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。*Redis支持数据的备份,即master-slave模式的数据备份。Node.js已经有很多redis相关的库,我在npm.org上搜了下大概有十几个吧,其中经常使用的redis,co-redis。由于我用koa做web框架,因此就直接用了koa-redis。这篇文章涉及koa.js,yield生成器和Promise相关的知识,需要先对这些概念有一定
3、的认识。下面介绍下redis和koa.js相关的操作吧,我是在Mac下操作的。1.安装redis,并启动客户端和服务器端brewinstallredis启动服务器端redis-server启动客户端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的安装这里就不讲了,通过brewinstall就可以。npminstallkoaredi
4、skoa-redis可以看到koa-redis已经依赖了co-redis,es6-promisify等库`--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数据这块是本文重点,由于官方的文档和例子不太详细,不熟悉node的同学折腾起来会比较累,所以本文提供了一个比较完整的例子。具
7、体代码里面注释已经写的比较清楚了。varsession=require('koa-generic-session');varredisStore=require('koa-redis');varkoa=require('koa');varredis=require('redis');//注意:client默认是异步callback方式调用;//store.client是经过了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,使用默认的ca