/** * MemoryCacheStore — 基于 Map 的 LRU 内存缓存存储 * * 核心特性: * - LRU 淘汰:读取时 delete+set 移到 Map 末尾;满时删除 Map 第一个(最旧) * - TTL 过期:get() 时检查 Date.now() > expiresAt,过期即删除 * - 标签索引:tagIndex: Map>,invalidateByTag() 批量删除 * - 同步接口:get() 返回 CacheEntry | null(非 Promise),避免微任务开销 * - 统计:hits / misses 计数,stats() 计算 hitRate * * @module lib/cache/memory-store * @see 15-route-cache.md §4.6(MemoryCacheStore 设计) */ import type { CacheStore, CacheEntry } from "../../types/app.js"; /** * MemoryCacheStore 构造选项 */ export interface MemoryCacheStoreOptions { /** 最大缓存条目数(默认 1000) */ maxEntries?: number; } /** * MemoryCacheStore — LRU 内存缓存实现 * * 基于 ES6 Map 的插入顺序特性实现 LRU: * - Map 保持插入顺序(ECMAScript 规范保证) * - get() 命中时 delete+set 将条目移到末尾(最新) * - 容量满时删除 Map.keys().next()(最旧/最少使用) * * 性能: * - get / set / delete: O(1) * - invalidateByTag: O(tag 关联的 key 数量) * - clear: O(1) */ export declare class MemoryCacheStore implements CacheStore { private _store; private _tagIndex; private _maxEntries; private _hits; private _misses; constructor(options?: MemoryCacheStoreOptions); /** * 获取缓存条目 * * 同步返回(内存存储无异步 I/O)。 * 检查 TTL 过期,过期则删除并返回 null。 * LRU 命中时 delete+set 移到 Map 末尾。 */ get(key: string): CacheEntry | null; /** * 写入缓存条目 * * LRU 淘汰:超过 maxEntries 时删除最旧条目。 * 标签索引:维护 tag → Set 映射。 */ set(key: string, entry: CacheEntry, ttl: number): void; /** * 删除指定 key 的缓存条目 */ delete(key: string): void; /** * 按标签批量失效 * * 删除所有关联到指定 tag 的缓存条目。 */ invalidateByTag(tag: string): void; /** * 清空所有缓存 */ clear(): void; /** * 缓存统计信息 */ stats(): { entries: number; hits: number; misses: number; hitRate: number; }; /** * 删除条目及其标签索引 */ private _deleteEntry; /** * 从标签索引中移除 key */ private _removeTagIndex; /** * 将 key 添加到标签索引 */ private _addTagIndex; }