在多个助手中将node.js redis客户端声明为const是一种安全的使用方法吗?

8cdiaqws  于 2021-06-09  发布在  Redis
关注(0)|答案(2)|浏览(397)

这是一个有点难以表达,所以我希望我的标题不是太可怕。
我有一个前端/后端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;
   }
});

谢谢您。

wvt8vs2t

wvt8vs2t1#

通常我要做的(用java语言说)是实现任何带有单例访问的显式类,保持连接和任何连接错误/重新连接处理。
我相信node.js中的所有模块都已经是单例了,但我可能会使用一个客户端类来保存它和我自己的访问相关方法。比如:

const config = require('config.json');
const Redis = require("ioredis");

class Redis {

    constructor(){
        client = new Redis(config.redis_url);
    }

    get(key) {
        return this.client.get(key);
    }

    set(key, value, ttl) {
        let rp;
        if (ttl === 0) {
            rp = this.client.set(key, value);
        }
        else {
            rp = this.client.set(key, value)
            .then(function(res) {
                this.client.expire(key, ttl);
            });
        }
        return rp;
    }

}

module.exports = new Redis;

我可能会包含一个data_init()方法,用于在第一次连接时检查并预加载初始键/值结构。

yqhsw0fo

yqhsw0fo2#

如果没有redis冲突。。。
如果您所指的不同“helper”模块在与redis交互时没有冲突,例如覆盖/使用相同的redis键,那么我看不出有任何理由不使用相同的redis示例(如garlicman所述)并将其导出到使用它的不同模块。
否则使用单独的redis数据库。。。
如果您确实需要单独的redis数据库连接,redis附带16个数据库,因此您可以指定在创建新示例时连接到哪个数据库-请参见下面的:

const redis = new Redis({ // SET UP CONFIG FOR CONNECTION TO REDIS
    port: 6379, // Redis port
    host: 127.0.0.1, // Redis host
    family: 4, // 4 (IPv4) or 6 (IPv6)
    db: 10, // Redis database to connect to
});

相关问题