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.ttl | number | 否 | - | 全局过期时间(毫秒) |
globalOptions.maxSize | number | 否 | - | 最大缓存项数 |
返回值
| 类型 | 说明 |
|---|---|
CacheInstance<T> | 缓存实例对象,包含 set/get/remove/clear/getStats 方法 |
工作原理
初始化:
- 创建 Map 存储缓存数据
- 创建统计对象
set(key, value, options):
- 检查容量限制(LRU):
- 如果达到 maxSize,删除最早的项
- 存储值和元数据(创建时间、TTL)
- 将项移到 Map 末尾(标记为最近使用)
- 检查容量限制(LRU):
get(key):
- 检查 key 是否存在
- 检查是否过期(当前时间 - 创建时间 > TTL):
- 过期:删除并返回 undefined(统计 miss)
- 未过期:更新访问时间,移到末尾(统计 hit)
- 返回值
remove(key):删除指定缓存项
clear():清空所有缓存
getStats():
- 返回命中率统计
- hitRate = hits / totalRequests
LRU 策略:Map 的第一项是最久未使用的,满时删除首项。 TTL 过期:存储创建时间,读取时检查是否过期。