这是一个有点难以表达,所以我希望我的标题不是太可怕。
我有一个前端/后端react/node.js(restapi)web应用程序,我想添加redis支持,用于存储检索应用程序全局设置和每个用户特定的设置(如语言首选项、上次登录等)。。。所以我考虑在我的后端restapi中添加一个/settings分支,以便从redis示例中推/拉这个信息。
这就是我node.js经验不足的原因。我正在考虑使用ioredis客户端,这似乎太简单了。如果我有几个助手(不止一个.js将调用redis)将客户机构造为 const
在每一个地方都安全吗?或者有没有其他推荐的方法来重用它的单个示例?
这是我想做的一个例子。想象一下,如果我有3个需要访问redis客户端的helper模块。我应该宣布他们为 const
每一个?或者将它们集中在一个helper模块中,并从中获取客户机?做这两件事都有坏处吗?
const config = require('config.json');
const redis_url = config.redis_url;
//redis setup
const Redis = require('ioredis');
const redis = new Redis(redis_url);
module.exports = {
test
}
async function test(id) {
redis.get(id, function (err, result) {
if (err) {
console.error(err);
throw(err);
} else {
return result;
}
});
谢谢您。
2条答案
按热度按时间wvt8vs2t1#
通常我要做的(用java语言说)是实现任何带有单例访问的显式类,保持连接和任何连接错误/重新连接处理。
我相信node.js中的所有模块都已经是单例了,但我可能会使用一个客户端类来保存它和我自己的访问相关方法。比如:
我可能会包含一个data_init()方法,用于在第一次连接时检查并预加载初始键/值结构。
yqhsw0fo2#
如果没有redis冲突。。。
如果您所指的不同“helper”模块在与redis交互时没有冲突,例如覆盖/使用相同的redis键,那么我看不出有任何理由不使用相同的redis示例(如garlicman所述)并将其导出到使用它的不同模块。
否则使用单独的redis数据库。。。
如果您确实需要单独的redis数据库连接,redis附带16个数据库,因此您可以指定在创建新示例时连接到哪个数据库-请参见下面的: