什么是 node-cache 以及为什么需要它?
node-cache 库是一个用 TypeScript 编写的简单快速的 Node.js 缓存系统。它允许将数据存储在内存中(in-memory cache),从而显著加快对频繁请求信息的访问速度(例如,数据库查询结果、API 响应、计算结果)。在 TypeScript 中,node-cache 提供了严格的类型化,使代码更加可预测和安全。
缓存对于降低服务器负载、减少响应时间以及在重复操作中节省资源是必要的。Node-cache 非常适合中小型项目,这些项目不需要分布式缓存(如 Redis),但需要一个轻量级的内存缓存。
安装
通过 npm 或 yarn 安装包:
npm install node-cache
# 或
yarn add node-cache对于 TypeScript,类型已包含在包中,无需额外安装 @types。
主要功能
- set(key, value, ttl) — 根据键保存值,并可选设置以秒为单位的生存时间(TTL)。
- get(key) — 根据键获取值。如果键不存在或已过期,则返回 undefined。
- del(key) — 删除一个或多个键。
- has(key) — 检查缓存中是否存在键。
- flushAll() — 清空整个缓存。
- getStats() — 返回统计信息(键数量、命中次数、未命中次数)。
TypeScript 代码示例
import NodeCache from 'node-cache';
// 创建一个默认 TTL 为 60 秒的缓存实例
const myCache = new NodeCache({ stdTTL: 60 });
// 类型化值
interface User {
id: number;
name: string;
}
// 保存数据
const user: User = { id: 1, name: 'Alice' };
myCache.set('user_1', user);
// 获取数据
const cachedUser = myCache.get<User>('user_1');
if (cachedUser) {
console.log(cachedUser.name); // Alice
} else {
console.log('缓存为空');
}
// 检查是否存在
console.log(myCache.has('user_1')); // true
// 删除
myCache.del('user_1');
// 清空整个缓存
myCache.flushAll();何时使用 node-cache
- 频繁请求的数据:例如,国家列表、货币汇率、配置信息。
- 繁重计算的结果:将昂贵操作的结果缓存几秒钟。
- API 网关:缓存外部 API 的响应以减少延迟和限制。
- 会话:临时存储会话数据(如果不需要持久性)。
如果您需要在多个服务器之间进行分布式缓存,请避免使用 node-cache——在这种情况下,最好使用 Redis。它也不适合存储大量数据(超过 1-2 GB),因为数据存储在 RAM 中。
Node-cache 是 TypeScript 中简单缓存场景的绝佳选择,在这些场景中,速度和最小配置至关重要。