如何在nestjs中使用redis客户端?
How to use redis client in nestjs?
我在 NestJs 中有一个微服务,这里是 main.ts 文件:
async function bootstrap() {
const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, {
transport: Transport.REDIS,
options: {
url: 'redis://localhost:6379',
}
})
await app.listen();
console.log('Redis is running');
}
bootstrap();
我想从服务调用 redis 数据库:
import { createClient } from '@redis/client';
async createWorkspaceShareCode(data: GetWorkspaceShareCodeMessage) {
const client = createClient({
url: 'redis://localhost:6379'
});
await client.connect();
await client.set('key', 'value');
const value = await client.get('key');
return value;
}
但这不是我想要的,这里有问题:
- 每次我发出请求,它都会创建新的连接
- 我需要在每个函数中编写此代码以连接到 redis(即使我已经在 main.ts 文件中连接)
这里的问题是:如何在我的 NestJs 微服务中使用某种 RedisService?
我已经尝试安装 redis 和 nestjs-redis 库,但第一个会产生上述问题,第二个只会给我一个错误:https://github.com/skunight/nestjs-redis/issues/97
我会做的是保留您的 createMicroservice
,因为它对于基于 Redis 的微服务服务器来说是必需的。然后你可以创建一个导出 redis 服务的模块,如下所示:
@Module({
providers: [
{
provide: 'REDIS_OPTIONS',
useValue: {
url: 'redis://localhost:6379'
}
},
{
inject: ['REDIS_OPTIONS']
provide: 'REDIS_CLIENT',
useFactory: async (options: { url: string }) => {
const client = createClient(options);
await client.connect();
return client;
}
}
],
exports: ['REDIS_CLIENT'],
})
export class RedisModule {}
现在,在包含您要使用的服务的模块中,将 RedisModule
添加到 imports
数组,在该服务中,您可以执行 @Inject('REDIS_CLIENT') private readonly redis: Redis
来注入 redis 实例并使用它与 this.redis.get('key')
和 this.redis.set('key', value)
我在 NestJs 中有一个微服务,这里是 main.ts 文件:
async function bootstrap() {
const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, {
transport: Transport.REDIS,
options: {
url: 'redis://localhost:6379',
}
})
await app.listen();
console.log('Redis is running');
}
bootstrap();
我想从服务调用 redis 数据库:
import { createClient } from '@redis/client';
async createWorkspaceShareCode(data: GetWorkspaceShareCodeMessage) {
const client = createClient({
url: 'redis://localhost:6379'
});
await client.connect();
await client.set('key', 'value');
const value = await client.get('key');
return value;
}
但这不是我想要的,这里有问题:
- 每次我发出请求,它都会创建新的连接
- 我需要在每个函数中编写此代码以连接到 redis(即使我已经在 main.ts 文件中连接) 这里的问题是:如何在我的 NestJs 微服务中使用某种 RedisService? 我已经尝试安装 redis 和 nestjs-redis 库,但第一个会产生上述问题,第二个只会给我一个错误:https://github.com/skunight/nestjs-redis/issues/97
我会做的是保留您的 createMicroservice
,因为它对于基于 Redis 的微服务服务器来说是必需的。然后你可以创建一个导出 redis 服务的模块,如下所示:
@Module({
providers: [
{
provide: 'REDIS_OPTIONS',
useValue: {
url: 'redis://localhost:6379'
}
},
{
inject: ['REDIS_OPTIONS']
provide: 'REDIS_CLIENT',
useFactory: async (options: { url: string }) => {
const client = createClient(options);
await client.connect();
return client;
}
}
],
exports: ['REDIS_CLIENT'],
})
export class RedisModule {}
现在,在包含您要使用的服务的模块中,将 RedisModule
添加到 imports
数组,在该服务中,您可以执行 @Inject('REDIS_CLIENT') private readonly redis: Redis
来注入 redis 实例并使用它与 this.redis.get('key')
和 this.redis.set('key', value)