TypeScript 中的缓存:Redis、Memcached 和内存解决方案
缓存是优化 Web 应用程序性能的关键机制之一。在 TypeScript 和 Node.js 生态系统中,有几种经过验证的缓存组织方法:从简单的内存解决方案到基于 Redis 和 Memcached 的分布式系统。在本文中,我们将详细介绍流行的库、它们的安装、配置和使用示例。
为什么需要缓存?
缓存可以减少服务器响应时间,降低数据库和外部 API 的负载,并改善用户体验。主要应用场景包括:
- 保存昂贵计算的结果
- 缓存外部 API 的响应
- 存储用户会话
- 缓存 HTML 页面片段
1. ioredis — 高级 Redis 客户端
ioredis 是在 Node.js 和 TypeScript 中使用 Redis 最流行的库。它支持集群、发布/订阅、事务和自动重连。
安装:
npm install ioredisnpm install @types/ioredis --save-dev在 TypeScript 中的基本使用:
import Redis from 'ioredis';
// 连接到本地 Redisconst redis = new Redis({ host: 'localhost', port: 6379, retryStrategy: (times) => Math.min(times * 50, 2000)});
// 缓存数据的函数async function getCachedData(key: string): Promise<string | null> { const cached = await redis.get(key); if (cached) { console.log('数据来自缓存'); return cached; } // 模拟从数据库获取数据 const data = `Data for ${key} at ${new Date().toISOString()}`; await redis.setex(key, 3600, data); // TTL 1 小时 return data;}
// 使用示例(async () => { const result = await getCachedData('user:123'); console.log(result);})();缓存对象:
interface User { id: number; name: string; email: string;}
async function cacheUser(user: User): Promise<void> { await redis.setex(`user:${user.id}`, 3600, JSON.stringify(user));}
async function getUserFromCache(id: number): Promise<User | null> { const cached = await redis.get(`user:${id}`); return cached ? JSON.parse(cached) : null;}2. node-cache — 简单的内存缓存
node-cache 是一个轻量级库,用于在 Node.js 进程的内存中存储数据。非常适合不需要分布式缓存的小型项目或原型。
安装:
npm install node-cachenpm install @types/node-cache --save-dev使用示例:
import NodeCache from 'node-cache';
const myCache = new NodeCache({ stdTTL: 600, // 默认生存时间(秒) checkperiod: 120 // 检查过期键的周期});
// 保存和获取数据myCache.set('key1', { value: 42 });const value = myCache.get('key1');console.log(value); // { value: 42 }
// 检查键是否存在if (myCache.has('key1')) { console.log('键存在');}
// 按键删除myCache.del('key1');
// 获取统计信息const stats = myCache.getStats();console.log(`缓存中的键数: ${stats.keys}`);3. lru-cache — 具有 LRU 策略的缓存
lru-cache 是一种使用最近最少使用(Least Recently Used)淘汰算法的缓存实现。它限制存储的记录数量,自动删除最旧的记录。非常适合固定大小的缓存。
安装:
npm install lru-cache