Files
dpage-api/src/modules/utils/cache.service.ts
T
2026-03-09 11:38:43 +03:30

53 lines
1.7 KiB
TypeScript
Executable File

import { CACHE_MANAGER, Cache } from '@nestjs/cache-manager';
import { Inject, Injectable, Logger, OnModuleInit } from '@nestjs/common';
@Injectable()
export class CacheService implements OnModuleInit {
private readonly logger = new Logger(CacheService.name);
constructor(@Inject(CACHE_MANAGER) private cacheManager: Cache) {}
async onModuleInit() {
;
this.logger.log(`Active Cache Store: ${JSON.stringify(this.cacheManager as any)}`);
// Should log 'Keyv' or 'KeyvRedis'. If it says 'Memory', the config is still wrong.
this.logger.log('Pinging Redis to check connection...');
try {
await this.set('ping', 'pong', 10); // TTL in seconds
const result = await this.get('ping');
if (result === 'pong') {
this.logger.log('✅ Redis connection successful (set/get test passed).');
} else {
this.logger.error(`❌ Redis connection test failed. Expected 'pong', got '${result}'.`);
}
await this.del('ping');
} catch (error: any) {
this.logger.error('❌ Failed to connect to Redis during ping test:', error.message);
}
}
/** Get value from cache */
async get<T>(key: string): Promise<T | undefined> {
return await this.cacheManager.get<T>(key);
}
/** Set value in cache with TTL in seconds */
async set(key: string, value: any, ttlSeconds: number) {
// cache-manager expects TTL in seconds
await this.cacheManager.set(key, value, ttlSeconds * 1000);
}
/** Delete a key from cache */
async del(key: string) {
await this.cacheManager.del(key);
}
/** Get remaining TTL in seconds */
async getTtl(key: string): Promise<number | undefined> {
return await this.cacheManager.ttl(key);
}
}