Tengo un microservicio en NestJs, aquí está el archivo 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();Quiero hacer llamadas a redis db desde el servicio:
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; }Pero eso no es lo que quiero, aquí están los problemas:
Lo que haría es mantener su createMicroservice como lo tiene, ya que será necesario para un servidor de microservicios basado en Redis. Luego puede crear un módulo que exporte un servicio redis así:
@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 {} Ahora, en el módulo que contiene el servicio que desea usar, agregue RedisModule a la matriz de imports y en el servicio puede hacer @Inject('REDIS_CLIENT') private readonly redis: Redis para inyectar la instancia de redis y usarla con this.redis.get('key') y this.redis.set('key', value)