// Emby 缓存模块 - 用于缓存 Emby 媒体库数据 // 缓存条目接口 export interface EmbyCachedEntry { expiresAt: number; data: T; } // 缓存配置 const EMBY_CACHE_TTL_MS = 6 * 60 * 60 * 1000; // 6小时 const EMBY_VIEWS_CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 1天 const EMBY_CACHE: Map> = new Map(); const EMBY_VIEWS_CACHE_KEY = 'emby:views'; /** * 生成 Emby 列表缓存键 */ function makeListCacheKey(page: number, pageSize: number, parentId?: string, embyKey?: string): string { const keyPrefix = embyKey ? `emby:${embyKey}` : 'emby'; return parentId ? `${keyPrefix}:list:${page}:${pageSize}:${parentId}` : `${keyPrefix}:list:${page}:${pageSize}`; } /** * 获取缓存的 Emby 列表数据 */ export function getCachedEmbyList( page: number, pageSize: number, parentId?: string, embyKey?: string ): any | null { const key = makeListCacheKey(page, pageSize, parentId, embyKey); const entry = EMBY_CACHE.get(key); if (!entry) return null; // 检查是否过期 if (entry.expiresAt <= Date.now()) { EMBY_CACHE.delete(key); return null; } return entry.data; } /** * 设置缓存的 Emby 列表数据 */ export function setCachedEmbyList( page: number, pageSize: number, data: any, parentId?: string, embyKey?: string ): void { const now = Date.now(); const key = makeListCacheKey(page, pageSize, parentId, embyKey); EMBY_CACHE.set(key, { expiresAt: now + EMBY_CACHE_TTL_MS, data, }); } /** * 清除所有 Emby 缓存 */ export function clearEmbyCache(): { cleared: number } { const size = EMBY_CACHE.size; EMBY_CACHE.clear(); return { cleared: size }; } /** * 获取缓存的 Emby 媒体库列表 */ export function getCachedEmbyViews(embyKey: string = 'default'): any | null { const cacheKey = `${EMBY_VIEWS_CACHE_KEY}:${embyKey}`; const entry = EMBY_CACHE.get(cacheKey); if (!entry) return null; // 检查是否过期 if (entry.expiresAt <= Date.now()) { EMBY_CACHE.delete(cacheKey); return null; } return entry.data; } /** * 设置缓存的 Emby 媒体库列表 */ export function setCachedEmbyViews(embyKey: string = 'default', data: any): void { const now = Date.now(); const cacheKey = `${EMBY_VIEWS_CACHE_KEY}:${embyKey}`; EMBY_CACHE.set(cacheKey, { expiresAt: now + EMBY_VIEWS_CACHE_TTL_MS, data, }); } /** * 获取缓存统计信息 */ export function getEmbyCacheStats(): { size: number; keys: string[]; } { return { size: EMBY_CACHE.size, keys: Array.from(EMBY_CACHE.keys()), }; }