Node.js 中的缓存:Redis、Memcached 和 Node-Cache

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

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

开始课程

JavaScript (Node.js) 中的缓存:Redis 及其他工具



缓存是优化 Node.js 服务器端应用程序性能的关键策略之一。它可以降低数据库负载、减少 API 响应时间并降低基础设施成本。在本文中,我们将介绍 Node.js 的主要缓存工具:Redis、Node-Cache(内置库)和 Memcached,比较它们的方法,并展示实际的代码示例。



为什么需要在 Node.js 中进行缓存?

没有缓存,对热门资源的每个请求都可能导致多次访问数据库或外部 API。缓存将频繁请求的数据保存在快速存储(RAM)中,从而带来以下好处:

  • 将响应时间(延迟)从 100-500 毫秒降低到 1-5 毫秒。
  • 减少对数据库和外部服务的请求次数。
  • 提高服务器的吞吐量(RPS)。


1. Redis — 缓存之王

Redis 是一种内存中的键值数据存储,通常用作缓存、消息代理和数据库。在 Node.js 中,使用 redis(或 ioredis)库与 Redis 交互。



安装与连接

npm install redis


const redis = require('redis');const client = redis.createClient({  url: 'redis://localhost:6379'});

client.on('error', (err) => console.error('Redis Error:', err));await client.connect();

// 带 TTL 的数据缓存示例async function getCachedData(key) { const cached = await client.get(key); if (cached) return JSON.parse(cached);

const freshData = { message: 'Hello from DB', time: Date.now() }; await client.setEx(key, 60, JSON.stringify(freshData)); // TTL 60 秒 return freshData;}


Redis 针对 Node.js 的特性

  • 支持 TTL — 自动删除过期条目。
  • 数据结构 — 字符串、列表、集合、哈希、有序集合。
  • Pub/Sub — 可以构建实时通知系统。
  • 集群 — 水平扩展而不损失性能。


2. Node-Cache — 无需外部依赖的轻量级内存缓存

Node-Cache 是一个简单的库,用于直接在 Node.js 进程的内存中缓存数据。非常适合小型项目、微服务或不想启动 Redis 的场景。



安装与示例

npm install node-cache


const NodeCache = require('node-cache');const myCache = new NodeCache({ stdTTL: 100, checkperiod: 120 });

// 保存数据myCache.set('user:123', { name: 'Alice', role: 'admin' });

// 获取数据const user = myCache.get('user:123');if (user === undefined) { // 缓存中没有数据 — 需要从数据库加载 console.log('Cache miss');} else { console.log('Cache hit:', user);}

// 按键删除myCache.del('user:123');

// 清空所有缓存myCache.flushAll();


Node-Cache 的优缺点

  • 优点: 不需要外部服务器,API 简单,支持 TTL 自动清理。
  • 缺点: 缓存仅存储在一个进程中 — 服务器重启时数据丢失;无法在多个 Node.js 实例之间共享。


3. Memcached — 开销最小的分布式缓存

Memcached 是另一种流行的内存存储,针对缓存进行了优化。在 Node.js 中,最常使用 memcached 库。



安装与示例

npm install memcached


const Memcached = require('memcached');const memcac                    

推荐