在express项目中使用redis

准备工作

  • 安装redis

  • 安装redis桌面管理工具:Redis Desktop Manager

  • 项目中安装redis:npm install redis

开始使用redis

使用方法很简单,初始化redis后,就可以使用了,如下:

//初始化
var redis = require("redis"),
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();
});
 

在项目中使用redis

如果在项目中使用redis,我们希望初始化一次,处处可用。我们如何让初始化后的redisClient成为全局变量,或者在别的模块中可用呢。

方法一:将redisClient存储在node的全局对象global中

在 ./bin/www 中创建client,并保存在全局对象global中:

global.redisClient = require("redis").createClient();

这样,redisClient在各模块中,不用引用,到处可用。

在controller层,需要使用redisClient的地方,直接使用

redisClient.hmset("user:"+uid ,{uid:uid,name:"wuwanyu",age:"21"},next);

方法二: 将redis初始化方法,封装在index.js中,然后exports出去

exports.init = function(){
var configs = require('../config.json'); var redis = require("redis"),
redisClient = redis.createClient(configs.redis); redisClient.on("error", function (err) {
console.log("Error " + err);
}); return redisClient;
};

使用时:

var redisClient = require("../database/index.js").init();
redisClient.hgetall("user:"+uid,next);

方法三:将init,close,hmset,hgetall封装方法

初始化redis:

// database/redis.js
module.init = function(callback) { redisClient = redis.createClient(configs.redis); require('./redis/main')(redisClient, module);
require('./redis/hash')(redisClient, module);
require('./redis/sets')(redisClient, module);
require('./redis/sorted')(redisClient, module);
require('./redis/list')(redisClient, module); module.redisClient = redisClient; if(typeof callback === 'function') {
callback();
}
};
 

封装redis的hmset,hgetall等方法:

// database/redis/hash

"use strict";

module.exports = function(redisClient, module) {

    var helpers = module.helpers.redis;

    module.setObject = function(key, data, callback) {
callback = callback || function() {};
redisClient.hmset(key, data, function(err) {
callback(err);
});
}; module.getObject = function(key, callback) {
redisClient.hgetall(key, callback);
};
};
 
 

在./bin/www 调用redis.init()方法,初始化redis;

async.waterfall([
function(cb){
redis.init(cb); //初始化redis
},
],function(){
// 启动node
});
 

在各个controller内调用:

var redis = require("../database/redis.js");

  redis.setObject("user:"+uid ,{uid:uid,name:"wuwanyu",age:"21"},next);  
redis.getObject("user:"+uid,next);
 
目录结构:
 
项目地址:
https://github.com/wuwanyu/redis.express.test

在express项目中使用redis的更多相关文章

  1. Mongo基础使用,以及在Express项目中使用Mongoose

    MongoDB的基本使用 MongoDB特点: 使用BSON存储数据 支持相对丰富的查询操作(相对其他nosql数据库) 支持索引 副本集(支持多个实例/多个服务器运行同个数据库) 分片(数据库水平扩 ...

  2. Redis学习笔记之二 :在Java项目中使用Redis

    成功配置redis之后,便来学习使用redis.首先了解下redis的数据类型. Redis的数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set( ...

  3. Redis的安装以及在项目中使用Redis的一些总结和体会

    第一部分:为什么我的项目中要使用Redis 我知道有些地方没说到位,希望大神们提出来,我会吸取教训,大家共同进步! 注册时邮件激活的部分使用Redis 发送邮件时使用Redis的消息队列,减轻网站压力 ...

  4. Django项目中使用Redis

    Django项目中使用Redis DjangoRedis 1 redis Redis 是一个 key-value 存储系统,常用于缓存的存储.django-redis 基于 BSD 许可, 是一个使 ...

  5. 在express项目中使用formidable & multiparty实现文件上传

    安装 formidable,multiparty 模块 npm install formidable,multiparty –save -d 表单上传 <form id="addFor ...

  6. 在项目中部署redis的读写分离架构(包含节点间认证口令)

    #### 在项目中部署redis的读写分离架构(包含节点间认证口令) ##### 1.配置过程 ---  1.此前就是已经将redis在系统中已经安装好了,redis utils目录下,有个redis ...

  7. Spring-Boot项目中配置redis注解缓存

    Spring-Boot项目中配置redis注解缓存 在pom中添加redis缓存支持依赖 <dependency> <groupId>org.springframework.b ...

  8. 【新手总结】在.Net项目中使用Redis作为缓存服务

    最近由于项目需要,在系统缓存服务部分上了redis,终于有机会在实际开发中玩一下,之前都是自己随便看看写写,很零碎也没沉淀下来什么,这次算是一个系统学习和实践过程的总结. 和Redis有关的基础知识 ...

  9. 【转】在Express项目中使用Handlebars模板引擎

    原文:http://fraserxu.me/2013/09/12/Using-Handlebarsjs-with-Expressjs/ 最近在用Expressjs做一个项目,前后端都用它来完成.自己之 ...

随机推荐

  1. tiny4412 串口驱动分析一 --- u-boot中的串口驱动

    作者:彭东林 邮箱:pengdonglin137@163.com 开发板:tiny4412ADK+S700 4GB Flash 主机:Wind7 64位 虚拟机:Vmware+Ubuntu12_04 ...

  2. jquery 遍历取值问题

    方法一:将a定义在外边 var a = new Array; var i = 0 ; $("img").each(function(){ a[i] = $(this).attr(& ...

  3. numpy 多维数组的存取

    多维数组的存取和一维数组类似,由于多维数组有多个轴,所以他的下标需要多个值来表示.这里讨论的主要是二维数组.二维数组0轴以行为单位,1轴以列为单位,存取数组使用元组作为下标,需要注意的是,python ...

  4. vue axios跨域请求,apache服务器设置

    问题所在axios请求会发送两次请求 也就是说,它会先使用options去测试,你这个接口是否能够正常通讯,如果不能就不会发送真正的请求过来,如果测试通讯正常,则开始正常请求. 思路: 跨域--> ...

  5. memcache学习资料

    memcached是国外社区网站LiveJournal团队开发,通过缓存数据库查询结果,减少数据库访问次数,从而提高动态web站点性能.官方站点 http://memcached.org/memcac ...

  6. yarn 查看任务信息

    一.在命令行使用命令查看 (1)查看日志:yarn logs -applicationId application_1469094096026_26612 (2)查看状态:yarn applicait ...

  7. 编译spark源码及塔建源码阅读环境

    编译spark源码及塔建源码阅读环境 (一),编译spark源码 1,更换maven的下载镜像: <mirrors> <!-- 阿里云仓库 --> <mirror> ...

  8. Unbinding $watch() Listeners In AngularJS

    原文: https://www.bennadel.com/blog/2480-unbinding-watch-listeners-in-angularjs.htm ------------------ ...

  9. selenium 的页面对象模型Page Object

    页面对象模型page object model是selenium中的一种脚本设计模式,它能将页面元素封装起来,与业务操作分隔开, 在页面变化改变时,无需去修改业务逻辑代码,提高脚本维护的效率. 1.p ...

  10. Nodejs 模拟telnet

    代码下载:https://files.cnblogs.com/files/xiandedanteng/nodejsTelnet.rar 效果: server.js代码: var net=require ...