TypeScript中的缓存:Redis、Memcached及内置方案

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

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

开始课程

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



基于 TypeScript 的现代 Web 应用程序需要高响应速度和高效的资源管理。实现这一目标的关键工具之一是缓存。在本文中,我们将详细讨论 TypeScript/Node.js 生态系统中的三种主要缓存方法:使用 Redis、Memcached 和内建解决方案(in-memory cache)。您将学习如何为您的任务选择合适的工具,并看到可工作的代码示例。



为什么需要在 TypeScript 中进行缓存?



缓存允许将频繁请求的数据临时存储在快速存储中,以减少响应时间并降低数据库或外部 API 的负载。在运行于 Node.js 上的 TypeScript 中,缓存对于以下方面特别有用:

  • 加速重复的数据库查询;
  • 减少访问外部服务时的延迟;
  • 优化计算密集型操作;
  • 管理用户会话。


让我们看看 TypeScript 开发人员可用的三种主要缓存类型。



1. 内建缓存 (In-Memory Cache)



最简单、最快的方法是将数据存储在 Node.js 进程本身的内存中。为此,您可以使用 Map 或更高级的库,例如 node-cache。



优点:

  • 最高速度(无网络调用);
  • 实现简单;
  • 无需安装外部服务。


缺点:

  • 应用程序重启时数据丢失;
  • 受限于单个进程的 RAM 容量;
  • 在集群模式下无法工作(每个进程都有自己的缓存)。


使用 node-cache 的示例



安装库:

npm install node-cache


实现一个简单的缓存服务:

import NodeCache from 'node-cache';

class MemoryCacheService { private cache: NodeCache;

constructor(ttlSeconds: number = 600) { this.cache = new NodeCache({ stdTTL: ttlSeconds, checkperiod: 120 }); }

public get<T>(key: string): T | undefined { return this.cache.get<T>(key); }

public set<T>(key: string, value: T, ttl?: number): boolean { return this.cache.set(key, value, ttl); }

public has(key: string): boolean { return this.cache.has(key); }

public del(key: string): number { return this.cache.del(key); }

public flush(): void { this.cache.flushAll(); }}

// 使用const cacheService = new MemoryCacheService(300); // TTL = 5 分钟

async function getData(id: string): Promise<any> { const cached = cacheService.get<any>(`data:${id}`); if (cached) { return cached; }

// 模拟耗时操作 const data = await fetchFromDatabase(id); cacheService.set(`data:${id}`, data); return data;}


2. 使用 Redis 进行缓存



Redis 是一个强大的内存数据存储,通常用作缓存。它支持复杂的数据结构(字符串、哈希、列表、集合),并且可以在集群模式下工作。



优点:

  • 持久性(可选);
  • 支持复杂的数据结构(例如,有序集合);
  • 内置 TTL (Time-To-Live) 机制;
  • 出色的性能(高达 100,000 次操作/秒);
  • 支持用于消息交换的 Pub/Sub。


缺点:

  • 需要安装和配置单独的服务器;
  • 比内建解决方案使用更多内存;
  • 网络延迟(尽管很小)。


在 TypeScript 中使用 Redis 的示例

博客

书籍推荐