mirror of
https://github.com/bluewave-labs/Checkmate.git
synced 2026-01-08 02:39:44 -06:00
60 lines
1.3 KiB
JavaScript
60 lines
1.3 KiB
JavaScript
const SERVICE_NAME = "RedisService";
|
|
|
|
class RedisService {
|
|
static SERVICE_NAME = SERVICE_NAME;
|
|
constructor({ Redis, logger }) {
|
|
this.Redis = Redis;
|
|
this.connections = new Set();
|
|
this.logger = logger;
|
|
}
|
|
|
|
getNewConnection(options = {}) {
|
|
const connection = new this.Redis(process.env.REDIS_URL, {
|
|
retryStrategy: (times) => {
|
|
return null;
|
|
},
|
|
...options,
|
|
});
|
|
this.connections.add(connection);
|
|
return connection;
|
|
}
|
|
|
|
async closeAllConnections() {
|
|
const closePromises = Array.from(this.connections).map((conn) =>
|
|
conn.quit().catch((err) => {
|
|
this.logger.error({
|
|
message: "Error closing Redis connection",
|
|
service: SERVICE_NAME,
|
|
method: "closeAllConnections",
|
|
details: { error: err },
|
|
});
|
|
})
|
|
);
|
|
|
|
await Promise.all(closePromises);
|
|
this.connections.clear();
|
|
this.logger.info({
|
|
message: "All Redis connections closed",
|
|
service: SERVICE_NAME,
|
|
method: "closeAllConnections",
|
|
});
|
|
}
|
|
|
|
async flushRedis() {
|
|
this.logger.info({
|
|
message: "Flushing Redis",
|
|
service: SERVICE_NAME,
|
|
method: "flushRedis",
|
|
});
|
|
const flushPromises = Array.from(this.connections).map((conn) => conn.flushall());
|
|
await Promise.all(flushPromises);
|
|
this.logger.info({
|
|
message: "Redis flushed",
|
|
service: SERVICE_NAME,
|
|
method: "flushRedis",
|
|
});
|
|
}
|
|
}
|
|
|
|
export default RedisService;
|