TypeScript 中的缓存:Redis、Memcached 和内存解决方案

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

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                    

推荐