Node.js中的缓存:Redis及加速应用的替代方案

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

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

开始课程

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



缓存是提升Node.js Web应用性能的关键工具之一。它可以缩短服务器响应时间,降低数据库和外部API的负载,并改善用户体验。本文将介绍流行的缓存库和方法:从内置方案到强大的Redis。



为什么需要在Node.js中使用缓存?

没有缓存时,每次服务器请求都可能导致重复计算、数据库查询或外部服务调用。这会增加响应时间和资源消耗。缓存将频繁请求的数据存储在快速存储(内存或内存数据库)中,从而能够:

  • 加快响应速度——从内存读取比从磁盘读取快100-1000倍。
  • 降低负载——数据库处理的请求更少。
  • 节省预算——减少云服务资源消耗。


1. Redis——工业标准

Redis是一个高性能的内存数据存储,支持多种数据结构(字符串、哈希、列表、集合)。在Node.js中,使用redis或ioredis包。



安装与连接

npm install redis


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

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


基本操作

// 带TTL(生存时间)写入await client.setEx('user:123', 3600, JSON.stringify({name: 'Alice', role: 'admin'}));

// 读取const cached = await client.get('user:123');if (cached) { console.log('来自缓存:', JSON.parse(cached));} else { // 查询数据库}


高级功能

  • 模式失效——删除所有以user:*为前缀的键。
  • Pub/Sub——实例间缓存变更通知。
  • Redis Cluster——水平扩展。


2. node-cache——无外部依赖的内存缓存

对于小型项目或原型,可以使用node-cache库。它在单个Node.js进程内运行,无需安装Redis。



安装

npm install node-cache


使用示例

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

// 保存数据myCache.set('posts:recent', postsData, 3600);

// 读取const cached = myCache.get('posts:recent');if (cached) { return cached;} else { const fresh = await fetchPostsFromDB(); myCache.set('posts:recent', fresh); return fresh;}


特点

  • 简单的TTL(生存时间)配置。
  • 自动清理过期条目。
  • 不适用于分布式系统(数据仅存在于单个进程中)。


3. memory-cache——轻量级替代方案

memory-cache是另一个简单的Node.js内存缓存。其API极为简洁。



const cache = require('memory-cache');

// 写入cache.put('api:weather', weatherData, 300000); // 5分钟

// 读取const data = cache.get('api:weather');if (!data) { // 重新请求}


4. 缓存策略

策略的选择取决于数据类型和对实时性的要求:



  • Cache-Aside(懒加载)——应用程序先检查缓存,未命中时加载数据并存入缓存。这是最流行的方法。
  • Write-Through——数据写入

推荐