首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该共享文件/模块之间的Redis连接吗?

我应该共享文件/模块之间的Redis连接吗?
EN

Stack Overflow用户
提问于 2013-05-17 19:18:29
回答 3查看 6.3K关注 0票数 18

我正在开发一个node.js应用程序,我需要大量使用Redis。该应用程序将在8个中央处理器核心进行cluster编辑。

现在,我有100个到Redis的并发连接,因为每个CPU的每个工作人员都有几个运行require('redis').createClient()的模块。

设想A:

file1.js:

代码语言:javascript
复制
var redis = require('redis').createClient();

file2.js

代码语言:javascript
复制
var redis = require('redis').createClient();

设想B:

redis.js

代码语言:javascript
复制
var redis = require('redis').createClient();

module.exports = redis;

file1.js

代码语言:javascript
复制
var redis = require('./redis');

file2.js

代码语言:javascript
复制
var redis = require('./redis');

哪种方法更好:在我介绍的每个新文件中创建新的Redis实例(场景A),或者创建一个全局Redis连接(场景B),并在所有模块之间共享这个连接。每种解决方案的缺点/好处是什么?

提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2014-10-11 23:02:44

当我面对这样的问题时,我通常会想到三个基本的问题。

  1. 哪一个更易读?
  2. 允许更好的代码重用吗?
  3. 哪个更有效率?

不一定按照这个顺序,因为这取决于场景,但我相信在这种情况下,所有这三个问题都支持选项B。如果您需要修改createClient的选项,那么您就需要在使用它的每个文件中编辑它们。选项A中的每个文件都使用redis,而选项B只是redis.js。另外,如果出现了新的或不同的产品,并且您想要替换redis,那么可以将redis.js作为不同包的包装器,甚至是一个新的redis客户端,从而大大缩短转换时间。

全局通常是一件坏事,但在本例中,redis.js不应该存储可变状态,因此在这种情况下使用全局/单例没有问题。

票数 5
EN

Stack Overflow用户

发布于 2013-05-17 19:44:33

Node和Redis都能很好地处理很多连接,所以这不是问题。

在您的情况下,您在应用程序启动时创建Redis连接,因此您正在设置的连接数量是有限的(也就是说,在应用程序启动之后,连接的数量将是恒定的)。

在高度动态的情况下,您希望重用相同的连接,例如,在HTTP服务器中,您需要查询Redis的每个请求。为每个请求创建一个新连接将是浪费资源(一直创建和销毁连接),而对每个请求重用一个连接则更好。

至于我更喜欢哪一种方案,我自己倾向于方案A。

票数 1
EN

Stack Overflow用户

发布于 2022-11-06 11:49:12

您可以使用redis redis-con.js创建文件来处理连接和函数。

代码语言:javascript
复制
const redis = require('redis');
let redisClient;
(async () => {
    redisClient = redis.createClient();

    redisClient.on("error", (error) => console.error(`Error Redis: ${error}`));

    await redisClient.connect();
})();

module.exports = redisClient;

然后,您需要创建函数来处理set、get和del。

现在,只需导入连接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16616381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档