import { DEFAULT_SETTINGS } from "@umt/contracts"; import { type PgCache, pgCacheFor } from "@umt/db"; import type { ServerContext } from "./modules/types.ts"; // 进程级共享缓存入口:PG kv_cache(移植 MP app/runtime/cache.py 的 TTLCache,存储换成 PG,三进程共享)。 // region 与 TTL 规则见 docs/runbook/cache.md 与 docs/porting/moviepilot-tmdb-cache.md。 export const CACHE_REGIONS = { /** TMDB 请求响应(MP TMDb.request 的 @cached):key = path?query */ tmdbRequest: "tmdb.request", /** TMDB 识别结果(MP TmdbCache):key = [类型][语言]{tmdbid 或名称}-{年份}-{季} */ tmdbRecognize: "tmdb.recognize", } as const; export function sharedCache(ctx: Pick): PgCache { return pgCacheFor(ctx.db); } /** TMDB 缓存策略(MP:CONF.meta = META_CACHE_EXPIRE 小时、CONF.tmdb 条数、EMPTY_RESULT_CACHE_TTL 秒) */ export interface TmdbCachePolicy { /** 秒 */ ttl: number; maxsize: number; /** 秒 */ emptyTtl: number; } export async function tmdbCachePolicy(ctx: Pick): Promise { const c = await ctx.settings.get("cache").catch(() => DEFAULT_SETTINGS.cache); const d = DEFAULT_SETTINGS.cache; return { ttl: (c.tmdbTtlHours ?? d.tmdbTtlHours) * 3600, maxsize: c.tmdbMaxSize ?? d.tmdbMaxSize, emptyTtl: c.emptyResultTtlSec ?? d.emptyResultTtlSec, }; }