建议配置egg插件的时候,配置了clients 的时候,不使用get获取插件 可以默认第一个或者配置isDefault 因为前期可能使用单个 client,后面加入了多个之后,前面直接使用的地方都会报错。
Q
[eggjs/egg]关于 egg-redis 插件配置 clients 和 client 的问题
9
A
回答
6
这个不是插件自己处理的吗?具体是哪个插件你反馈给哪个插件吧
5
就egg-redis插件~
@JasinYip
6
addSingleton 的问题,这个没法搞默认,因为不知道对应的对象有没有 get 方法被占用。
7
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...
9
clients:{ default:{ } }
直接在clients里面写个default,怎么样? @liuhuanhui
1
试过了 不行的,我自己在extend里面扩展了。@qingdengyue
8
default 是配置覆盖到其他 clients, 就 addSingleton 目前的设计,是没法做到 client 升级到 clients 后无缝支持原来的。
因为框架无法知道 app.xx 本身有没有 get 方法。这种可以自己写个 proxy,或者最简单的方法就是搜索替换,把原来的 app.xx 换掉就好了,成本不高。
3
@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都会创建一个吗?对性能会不会有什么影响
1
这个就跟直接使用ioredis,一样了。也就失去了插件的Singleton的意义。new Redis(config)每次都会连接一次Redis。然后也需要手动关闭连接。