• 在express项目中使用redis


    在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
  • 相关阅读:
    国内最火的3款前端开发框架
    Cordova是做什么的
    老师你好。使用cordova生成的hellowold 的安卓5.0版本太高。怎么才可以生成4.4的呢?
    一个类似bootstrap的foundation
    role在标签中的作用是什么?
    如何做到根据不同的进度用不同的颜色显示整个进度条
    wall 和panel有啥区别
    git ignore
    eclipse js 引用跳转
    计划
  • 原文地址:https://www.cnblogs.com/wuwanyu/p/wuwanyu20160331.html
Copyright © 2020-2023  润新知