import { injectable } from "inversify"; import { createClient as CreateRedisClient, RedisClient } from "redis"; @injectable() class Redis { private mainClient: RedisClient; private dedicatedClients: RedisClient[] = []; public shared() { if (!this.mainClient) { this.mainClient = CreateRedisClient(); } return this.mainClient; } public dedicated() { const newClient = this.shared().duplicate(); this.dedicatedClients.push(newClient); return newClient; } public stop() { this.mainClient.quit(() => { ( this.mainClient).end(true); }); for (const client of this.dedicatedClients) { client.quit(() => { ( client).end(true); }); } } } export { RedisClient, Redis }; export default Redis;