43 lines
1.3 KiB
TypeScript
Executable File
43 lines
1.3 KiB
TypeScript
Executable File
import KeyvRedis from '@keyv/redis';
|
|
import Keyv from 'keyv';
|
|
import type { CacheModuleAsyncOptions } from '@nestjs/cache-manager';
|
|
import { ConfigService } from '@nestjs/config';
|
|
import { Logger } from '@nestjs/common'; // 1. Import Logger
|
|
|
|
export function cacheConfig(): CacheModuleAsyncOptions {
|
|
// 2. Create a logger instance
|
|
const logger = new Logger('CacheConfig');
|
|
|
|
return {
|
|
isGlobal: true,
|
|
inject: [ConfigService],
|
|
useFactory: (configService: ConfigService) => {
|
|
const ttl = configService.get<number>('CACHE_TTL', 120);
|
|
const namespace = configService.get<string>('CACHE_NAMESPACE', 'app-cache');
|
|
const redisUri = configService.getOrThrow<string>('REDIS_URI');
|
|
|
|
// 3. Create the KeyvRedis store first
|
|
const keyvRedisStore = new KeyvRedis(redisUri);
|
|
|
|
// 4. Attach event listeners
|
|
keyvRedisStore.client.on('connect', () => {
|
|
logger.log('✅ Redis connected successfully.');
|
|
});
|
|
keyvRedisStore.client.on('error', (error) => {
|
|
logger.error('❌ Redis connection error:', error);
|
|
});
|
|
|
|
// 5. Pass the store to Keyv
|
|
const store = new Keyv({
|
|
store: keyvRedisStore, // Use the instance
|
|
namespace,
|
|
ttl: ttl * 1000,
|
|
});
|
|
|
|
return {
|
|
store,
|
|
ttl,
|
|
};
|
|
},
|
|
};
|
|
} |