feat: implement connection management in DatabasePlugin; add connection check in RedisPlugin; update session ID in runQuery test

This commit is contained in:
Boris D
2025-10-13 09:50:55 +03:00
parent 73999de32e
commit e327a8da85
4 changed files with 58 additions and 16 deletions

View File

@ -2,6 +2,8 @@ import Redis from "ioredis";
import { Plugin } from "../plugin.class";
export class RedisPlugin extends Plugin {
private static connectionPool: Map<string, Redis> = new Map();
constructor(
name: string,
private redisClient: Redis,
@ -22,16 +24,37 @@ export class RedisPlugin extends Plugin {
]);
}
private static isConnected(key: string): boolean {
return (
RedisPlugin.connectionPool.has(key) &&
RedisPlugin.connectionPool.get(key).status === "ready"
);
}
static init(
name: string,
config: { host: string; port: number },
prefix: string
): RedisPlugin {
const key = `${config.host}:${config.port}`;
if (RedisPlugin.isConnected(key)) {
return new RedisPlugin(name, RedisPlugin.connectionPool.get(key), prefix);
}
RedisPlugin.connectionPool.delete(key);
const redisClient = new Redis({
host: config.host,
port: config.port,
commandTimeout: 10000,
connectTimeout: 10000,
lazyConnect: false,
maxRetriesPerRequest: 1,
enableReadyCheck: true,
});
RedisPlugin.connectionPool.set(key, redisClient);
return new RedisPlugin(name, redisClient, prefix);
}