在nodejs中使用redis的最佳实践是什么?

时间:2014-02-11 17:07:16

标签: node.js redis

我正在使用nodejs,express和node_redis构建应用。我想创建一个模块来封装所有与redis相关的操作,这样我就不必在任何地方处理redis密钥了。

|- app.js
|- models
|   |- db.js   <-- All redis-related operations here
.....

然后我在这里遇到两个问题。

  1. 我想创建redis连接并选择一个数据库:

    var redis = require('redis');
    var client = redis.createClient();
    client.select(config.database, function() {
        // actual db code
    });
    

    由于select是异步调用,我如何在单独的模块中使用它(db.js)?

  2. 在脚本结束之前必须调用client.quite(),否则脚本将不会退出。如果在db.js中将client封装为本地变量,我该如何在db.js之外执行此操作?

2 个答案:

答案 0 :(得分:4)

我建议使用定义的接口创建类似服务/存储库/接口的东西,然后调用它的方法。

例如,如果您有用户db:

var UserService=function(){
  this.client=new ...
}

UserService.prototype.getUserById=function(id, cb){
this.client.select(...,function(result,err){
  cb(result);
}
}

UserService.prototype.... so on

现在,在您的快速应用程序中,您将创建一个UserService var并使用它。 当然,您应该更智能地创建UserService。 在UserService中,您可以添加缓存。

var app = express();
var userService = new UserService();
//...

关闭阅读:Do I need to quit

答案 1 :(得分:0)

我用这个

lib / redisClient.js

import redis from "redis";

let _redisClient;

const redisClient = {
  createClient(uri)  {
    if (!_redisClient){
      console.log('Redis conexion created')
    _redisClient = redis.createClient(uri);
    }
    return _redisClient;
  },
  close(): void {
    _redisClient.close();
  }
};

export default redisClient;

index.js

import redisClient from "./lib/RedisClient"
...
const client = redisClient.createClient(process.env.REDISURI)
const clientA = redisClient.createClient(process.env.REDISURI)
...

这只会产生一个连接,所以您只会得到:

Redis连接已创建

代替

Redis连接已创建

Redis连接已创建