import { EventEmitter, ICallback, IRedisClient, IRedisConfig } from 'redis-smq-common';
import { ERedisConnectionAcquisitionMode, IConnectionPoolConfig, IRedisPooledConnection, TRedisConnectionPoolEvent } from './types/connection-pool.js';
export declare class RedisConnectionPool extends EventEmitter<TRedisConnectionPoolEvent> {
    protected static instance: RedisConnectionPool | null;
    protected readonly redisConfig: IRedisConfig;
    protected readonly poolConfig: Required<IConnectionPoolConfig>;
    protected readonly connections: Map<string, IRedisPooledConnection>;
    protected readonly waitingQueue: Array<{
        callback: ICallback<IRedisClient>;
        timestamp: number;
        mode: ERedisConnectionAcquisitionMode;
    }>;
    protected initialized: boolean;
    protected shuttingDown: boolean;
    protected reapTimer: NodeJS.Timeout | null;
    protected connectionIdCounter: number;
    protected constructor(redisConfig: IRedisConfig, poolConfig?: IConnectionPoolConfig);
    static initialize(redisConfig: IRedisConfig, poolConfig: IConnectionPoolConfig | undefined, cb: ICallback<RedisConnectionPool>): void;
    static getInstance(): RedisConnectionPool;
    static shutdown(cb: ICallback): void;
    protected releaseExclusiveConnection(connection: IRedisPooledConnection): void;
    protected releaseSharedConnection(connection: IRedisPooledConnection): void;
    protected createMinimumConnections(cb: ICallback): void;
    protected createConnection(cb: ICallback<IRedisPooledConnection>): void;
    protected findAvailableConnection(mode: ERedisConnectionAcquisitionMode): IRedisPooledConnection | null;
    protected prepareConnection(connection: IRedisPooledConnection, mode: ERedisConnectionAcquisitionMode, cb: ICallback<IRedisClient>): void;
    protected processWaitingQueue(): void;
    protected startReaper(): void;
    protected stopReaper(): void;
    protected reapIdleConnections(): void;
    protected destroyConnection(connectionId: string): void;
    protected handleConnectionError(connectionId: string, error: Error): void;
    protected getConnection(client: IRedisClient): IRedisPooledConnection | undefined;
    protected getConnectionId(client: IRedisClient): string | null;
    protected generateConnectionId(): string;
    acquire(mode: ERedisConnectionAcquisitionMode, cb: ICallback<IRedisClient>): void;
    release(client: IRedisClient): void;
    destroy(client: IRedisClient, cb: ICallback): void;
    getStats(): {
        total: number;
        available: number;
        inUse: number;
        exclusively: number;
        shared: number;
        sharedUsers: number;
        waiting: number;
    };
    shutdown(cb: ICallback): void;
}
//# sourceMappingURL=redis-connection-pool.d.ts.map