这是重用Redis客户端的正确方法吗?

7

我创建了一个名为redisConnection.js的Redis客户端模块。其内容如下:

var redis = require('redis').createClient();

exports.exposeConnection = function(){

 return redis;

}; 

现在,每当我想使用redis时,我只需要 require 该模块并调用 exposeConnection 方法。我想知道这是否是重复使用连接的正确方法。我希望redis连接仅在实例化一次,而不是每次调用模块时都要实例化。如果不是,请问有更好的重用方法吗?

1
无法确定它是否“正确”。但是,Node根据文件路径缓存模块。因此,只要没有多个redisConnection.js文件,所有require()中应该只创建一个连接。 - Jonathan Lonowski
@JonathanLonowski 谢谢。模块缓存正是我在寻找的东西。你能添加一个答案吗? - Akshat Jiwan Sharma
2
我知道这不是你问题的答案,但这可能是一种通过以下方式实现客户端应用程序访问的方法 - var redis = require('redis'); GLOBAL._REDISCLIENT = redis.createClient(port, server); - Pranav
@Pranav 感谢您指出这一点。我不知道在node js中可以创建全局变量。 - Akshat Jiwan Sharma
1个回答

8

这几乎与我所做的(以及我在以前的应用程序中所做的)相似。

不过,我会直接这样做,而不是通过一个函数来暴露它:

module.exports = require('redis').createClient();

因此,稍后我只需执行redis = require('./local-redis')而不是redis = require('./local-redis').exposeConnection()

这是一种非常简单但可靠的架构。


谢谢你的回答:)我差点放弃这个问题了。 - Akshat Jiwan Sharma
1
如果您正在使用 WATCHEXECMULTI 等事务命令,请小心使用单个连接。如果同时使用单个连接,则您的代码可能会出现错误。为确保正确性,您需要使用不同的连接。 - nishanthshanmugham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接