feat: implement connection management in DatabasePlugin; add connection check in RedisPlugin; update session ID in runQuery test
This commit is contained in:
@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user