我应该共享文件/模块之间的Redis连接?(Should I share Redis connect

2019-09-04 03:50发布

我正在开发一个应用程序的Node.js和我需要重Redis的用法。 该应用程序将被cluster跨越8个CPU内核编

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

方案A:

file1.js:

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

file2.js

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

方案B:

redis.js

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

module.exports = redis;

file1.js

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

file2.js

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

哪种方法更好:在每一个新的文件,我介绍(方案A)创建新的Redis实例或全局创建一个Redis的连接(方案B)和共享跨越我有所有的模块此连接。 什么是每个解决方案的缺点/福利?

提前致谢!

Answer 1:

当我面对一个问题,比如这个我一般考虑三个基本问题。

  1. 哪个更可读?
  2. 这使得更好的代码重用?
  3. 哪个更有效?

不一定,因为它取决于具体的方案,但我相信在这种情况下,所有这三个问题都赞成选项B.如果你曾经需要修改createClient选择这个命令,你就那么需要在每个文件进行编辑它使用它。 其备选方案A是使用Redis的,而B选项只是redis.js每个文件。 此外,如果一个新的或不同的产品出来,你要替换的Redis这将是可行的,使redis.js包装为不同的包,甚至是新的Redis的客户大幅削减转换时间。

全局通常是一件坏事,但在这个例子中redis.js不应该被存储可变的状态,所以有这方面的一个全局/单没有问题。



Answer 2:

这两个节点和Redis的可以处理大量的连接非常好,所以这不是一个问题。

在你的情况,你创建你的应用程序的启动Redis的连接,所以你建立连接的数量是有限的(在这个意义上,你的应用程序启动后,连接的数量将保持不变)。

情况下,您会希望重复使用相同的连接处于高度动态的情况下,例如用在您需要查询的Redis为每个请求的HTTP服务器。 创建为每个请求一个新的连接将是资源(创建和销毁连接的所有的时间)和再利用为每个请求一个连接将是优选的浪费。

至于这两种情况下的我喜欢的,我倾向于方案A自己。



文章来源: Should I share Redis connection between files/modules?
标签: node.js redis