39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
import type { RedisConfig } from './types';
|
|
|
|
/**
|
|
* Get Redis connection configuration with retry settings
|
|
*/
|
|
export function getRedisConnection(config: RedisConfig) {
|
|
const isTest = process.env.NODE_ENV === 'test' || process.env['BUNIT'] === '1';
|
|
|
|
// In test mode, always use localhost
|
|
const testConfig = isTest
|
|
? {
|
|
host: 'localhost',
|
|
port: 6379,
|
|
}
|
|
: config;
|
|
|
|
const baseConfig = {
|
|
host: testConfig.host,
|
|
port: testConfig.port,
|
|
password: testConfig.password,
|
|
db: testConfig.db,
|
|
maxRetriesPerRequest: null, // Required by BullMQ
|
|
enableReadyCheck: false,
|
|
connectTimeout: isTest ? 1000 : 3000,
|
|
lazyConnect: false, // Changed from true to ensure connection is established immediately
|
|
keepAlive: true, // Changed from false to maintain persistent connections
|
|
retryStrategy: (times: number) => {
|
|
const maxRetries = isTest ? 1 : 3;
|
|
if (times > maxRetries) {
|
|
return null; // Stop retrying
|
|
}
|
|
const delay = isTest ? 100 : Math.min(times * 100, 3000);
|
|
return delay;
|
|
},
|
|
};
|
|
|
|
// In non-test mode, spread config first to preserve additional properties, then override with our settings
|
|
return isTest ? baseConfig : { ...config, ...baseConfig };
|
|
}
|