核心用法
Smart Cache 是一个高性能的JavaScript缓存实现,提供两种经典的缓存淘汰策略:
- LRU (Least Recently Used):移除最久未访问的条目,适合访问模式随时间变化的场景
- LFU (Least Frequently Used):移除访问频率最低的条目,适合访问频率差异明显的场景
主要API包括 set(key, value, ttl) 设置缓存、get(key) 获取缓存(自动返回命中状态与过期原因)、delete(key) 删除条目、clear() 清空缓存以及 getStats() 获取统计信息。
显著优点
1. 双策略灵活切换:通过配置即可在LRU和LFU之间切换,无需修改代码
2. TTL自动过期:支持条目级和全局级TTL设置,自动清理过期数据
3. 命中状态透明:get() 返回详细的命中信息,包括是否命中、值内容、过期原因
4. 统计监控:内置命中率估算和状态统计,便于性能调优
5. 容量控制:硬上限保护,自动触发淘汰机制防止内存溢出
潜在缺点与局限性
1. 非线程安全:单线程JavaScript实现,多进程/集群环境需外部同步
2. LFU公平性问题:新条目初始计数为0,容易被LFU策略立即淘汰(冷启动问题)
3. 命中率计算简化:当前实现基于容量比例估算,非真实命中率统计
4. 内存开销:维护accessOrder数组和accessCount Map,空间复杂度O(n)
5. 无持久化:纯内存缓存,进程重启数据丢失
适合人群
- 需要快速集成缓存层的Node.js应用开发者
- 学习缓存算法原理的工程师
- 中小规模应用(预估缓存条目<10K)的性能优化
- 原型开发阶段需要轻量级缓存方案的项目
常规风险
- 内存泄漏风险:若未配置合理
maxSize或存在TTL设置错误,可能导致内存持续增长 - 时间敏感操作:依赖
Date.now(),系统时间跳变可能影响TTL准确性 - 大对象缓存:未对value大小做限制,单个大对象可能占满缓存容量
- 无加密存储:敏感数据直接明文存储于内存,需外部加密处理