Skip to content

useCache

创建响应式缓存系统,提供 TTL 过期、LRU 清理策略和统计信息。

函数签名

typescript
function useCache<T>(globalOptions?: CacheOptions): CacheInstance<T>

interface CacheOptions {
  ttl?: number        // 过期时间(毫秒)
  maxSize?: number    // 最大缓存项数
}

interface CacheInstance<T> {
  set: (key: string, value: T, options?: CacheOptions) => void
  get: (key: string) => T | undefined
  remove: (key: string) => void
  clear: () => void
  getStats: () => CacheStats
}

interface CacheStats {
  hits: number          // 命中次数
  misses: number        // 未命中次数
  totalRequests: number // 总请求次数
  hitRate: number       // 命中率(0-1)
}

参数

参数名类型必填默认值说明
globalOptions.ttlnumber-全局过期时间(毫秒)
globalOptions.maxSizenumber-最大缓存项数

返回值

类型说明
CacheInstance<T>缓存实例对象,包含 set/get/remove/clear/getStats 方法

工作原理

  1. 初始化

    • 创建 Map 存储缓存数据
    • 创建统计对象
  2. set(key, value, options)

    • 检查容量限制(LRU):
      • 如果达到 maxSize,删除最早的项
    • 存储值和元数据(创建时间、TTL)
    • 将项移到 Map 末尾(标记为最近使用)
  3. get(key)

    • 检查 key 是否存在
    • 检查是否过期(当前时间 - 创建时间 > TTL):
      • 过期:删除并返回 undefined(统计 miss)
      • 未过期:更新访问时间,移到末尾(统计 hit)
    • 返回值
  4. remove(key):删除指定缓存项

  5. clear():清空所有缓存

  6. getStats()

    • 返回命中率统计
    • hitRate = hits / totalRequests

LRU 策略:Map 的第一项是最久未使用的,满时删除首项。 TTL 过期:存储创建时间,读取时检查是否过期。