我正在开发一个node.js应用程序,我需要大量使用Redis。该应用程序将在8个中央处理器核心进行cluster编辑。
现在,我有100个到Redis的并发连接,因为每个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');哪种方法更好:在我介绍的每个新文件中创建新的Redis实例(场景A),或者创建一个全局Redis连接(场景B),并在所有模块之间共享这个连接。每种解决方案的缺点/好处是什么?
提前感谢!
发布于 2014-10-11 23:02:44
当我面对这样的问题时,我通常会想到三个基本的问题。
不一定按照这个顺序,因为这取决于场景,但我相信在这种情况下,所有这三个问题都支持选项B。如果您需要修改createClient的选项,那么您就需要在使用它的每个文件中编辑它们。选项A中的每个文件都使用redis,而选项B只是redis.js。另外,如果出现了新的或不同的产品,并且您想要替换redis,那么可以将redis.js作为不同包的包装器,甚至是一个新的redis客户端,从而大大缩短转换时间。
全局通常是一件坏事,但在本例中,redis.js不应该存储可变状态,因此在这种情况下使用全局/单例没有问题。
发布于 2013-05-17 19:44:33
Node和Redis都能很好地处理很多连接,所以这不是问题。
在您的情况下,您在应用程序启动时创建Redis连接,因此您正在设置的连接数量是有限的(也就是说,在应用程序启动之后,连接的数量将是恒定的)。
在高度动态的情况下,您希望重用相同的连接,例如,在HTTP服务器中,您需要查询Redis的每个请求。为每个请求创建一个新连接将是浪费资源(一直创建和销毁连接),而对每个请求重用一个连接则更好。
至于我更喜欢哪一种方案,我自己倾向于方案A。
发布于 2022-11-06 11:49:12
您可以使用redis redis-con.js创建文件来处理连接和函数。
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。
现在,只需导入连接
https://stackoverflow.com/questions/16616381
复制相似问题