共享 node-redis 连接 nodeJS



使用 nodejs 和 node-redis.

我有一个条目"server.ts"文件,用于引导连接,例如猫鼬。

猫鼬,然后自动共享与 mongodb 的连接,因此稍后在应用程序中,我可以利用此连接并查询数据库。

使用node-redis,这看起来根本不会发生。相反,连接被调用到局部变量中,然后留给开发人员处理。

这里有最佳实践,还是只是将其粘贴到全局命名空间中?

global.REDIS_CONNECTION = new redis.createClient(options)

更好的模式是创建一个单例:

export class RedisService {
private static instance: RedisService | null = null;
private connection!: RedisConnection;
private constructor() {}
public static async getConnection(): Promise<RedisService> {
if (RedisService.instance == null) {
await RedisService.initInstance();
}
return RedisService.instance;
}
private static async initInstance(): Promise<void> {
RedisService.instance = new RedisService();
RedisService.instance.connection = new redis.createClient(options);
// Check connection
await RedisService.instance.connection.check();
}
// ...
public async getItem(): Promise<any> {
this.connection.getItem(/* ... */);
}
public async setItem(): Promise<any> {
this.connection.setItem(/* ... */);
}
}

并像这样使用它:

redisService = await RedisService.getInstance();
redisService.getItem(/*...*/);

RedisService封装了检索/设置有关 redis 信息的逻辑,并抽象了 redis 库的使用。

如果你将来开始使用Nestjs或Awilik,这也是向依赖注入迈出的一步。

最新更新