[eggjs/egg]关于 egg-redis 插件配置 clients 和 client 的问题

2024-06-28 230 views
1

建议配置egg插件的时候,配置了clients 的时候,不使用get获取插件 可以默认第一个或者配置isDefault 因为前期可能使用单个 client,后面加入了多个之后,前面直接使用的地方都会报错。

回答

9

这个不是插件自己处理的吗?具体是哪个插件你反馈给哪个插件吧

3

就egg-redis插件~

@JasinYip

6

addSingleton 的问题,这个没法搞默认,因为不知道对应的对象有没有 get 方法被占用。

4
config.redis = {
    default: {
      port: 6379, // Redis port
      host: "127.0.0.1", // Redis host
      password: "",
      db: 0,
    },
    clients: {
      match: {
        port: 16379, // Redis port
        host: "127.0.0.1", // Redis host
        password: "",
        db: 0,
      }
    }
  };

@atian25 但是配置默认的default也无法获取到,现在提示ctx.redis.get的方法是redis的而不是插件的get clients的,文档里写的支持Multi Clients...

1

clients:{ default:{ } }

直接在clients里面写个default,怎么样? @liuhuanhui

1

试过了 不行的,我自己在extend里面扩展了。@qingdengyue

2

default 是配置覆盖到其他 clients, 就 addSingleton 目前的设计,是没法做到 client 升级到 clients 后无缝支持原来的。

因为框架无法知道 app.xx 本身有没有 get 方法。这种可以自己写个 proxy,或者最简单的方法就是搜索替换,把原来的 app.xx 换掉就好了,成本不高。

9

@atian25 我还想请教一下,如果我在extend application里面,扩展了一个方法

getRedis(this: Application, client: string) {
    const config = this.config.redis[client];
    if (!config) {
      throw new Error(`redis client ${client} not find!`);
    }
    return new Redis(config);
  }

那我每调用getRedis都会创建一个吗?对性能会不会有什么影响

2

这个就跟直接使用ioredis,一样了。也就失去了插件的Singleton的意义。new Redis(config)每次都会连接一次Redis。然后也需要手动关闭连接。