Files
motovaultpro/backend/src/core/config/redis.ts
Eric Gullickson 8f5117a4e2 MVP Build
2025-08-09 12:47:15 -05:00

58 lines
1.4 KiB
TypeScript

/**
* @ai-summary Redis client and caching service
* @ai-context Used by all features for caching external API responses
*/
import Redis from 'ioredis';
import { logger } from '../logging/logger';
import { env } from './environment';
export const redis = new Redis({
host: env.REDIS_HOST,
port: env.REDIS_PORT,
retryStrategy: (times) => Math.min(times * 50, 2000),
});
redis.on('connect', () => {
logger.info('Redis connected');
});
redis.on('error', (err) => {
logger.error('Redis error', { error: err.message });
});
export class CacheService {
private prefix = 'mvp:';
async get<T>(key: string): Promise<T | null> {
try {
const data = await redis.get(this.prefix + key);
return data ? JSON.parse(data) : null;
} catch (error) {
logger.error('Cache get error', { key, error });
return null;
}
}
async set(key: string, value: any, ttl?: number): Promise<void> {
try {
const data = JSON.stringify(value);
if (ttl) {
await redis.setex(this.prefix + key, ttl, data);
} else {
await redis.set(this.prefix + key, data);
}
} catch (error) {
logger.error('Cache set error', { key, error });
}
}
async del(key: string): Promise<void> {
try {
await redis.del(this.prefix + key);
} catch (error) {
logger.error('Cache delete error', { key, error });
}
}
}
export const cacheService = new CacheService();