如何在Ubuntu上配置Node.js缓存策略
导读:在 Ubuntu 上配置 Node.js 缓存策略 一 概念与目标 面向 Node.js 的缓存通常包含三类: 依赖安装缓存:npm/Yarn 的下载与解压缓存,影响安装速度与磁盘占用。 HTTP 运行时缓存:通过响应头控制浏览器与 C...
在 Ubuntu 上配置 Node.js 缓存策略
一 概念与目标
- 面向 Node.js 的缓存通常包含三类:
- 依赖安装缓存:npm/Yarn 的下载与解压缓存,影响安装速度与磁盘占用。
- HTTP 运行时缓存:通过响应头控制浏览器与 CDN/反向代理的缓存行为。
- 数据层缓存:进程内或外部缓存(如 Redis)降低数据库压力、提升响应。
二 配置依赖安装缓存
- 选择合适目录并配置 npm 缓存路径(示例将缓存放到 /opt/node-cache):
- 创建目录并赋权:
- sudo mkdir -p /opt/node-cache
- sudo chown -R $USER:$USER /opt/node-cache
- 配置 npm 使用该目录(写入用户级配置,避免需要 sudo):
- npm config set cache /opt/node-cache
- 验证:npm config get cache 应返回 /opt/node-cache
- 创建目录并赋权:
- 如需自定义全局包目录(可选,避免与系统目录混用):
- npm config set prefix /opt/node-global
- 将 /opt/node-global/bin 加入 $PATH(写入 ~/.bashrc 或 /etc/profile.d/node.sh):
- echo ‘export PATH=/opt/node-global/bin:$PATH’ > > ~/.bashrc & & source ~/.bashrc
- 使用 Yarn 时(可选):
- 设置缓存目录:yarn config set cache-folder /opt/yarn-cache
- 验证:yarn config get cache-folder
- 清理无用的包缓存(维护时执行):
- npm cache clean --force
- 说明:Node.js 运行时本身不处理 HTTP 缓存,HTTP 缓存需由框架/中间件设置响应头实现。
三 配置 HTTP 缓存策略
- 在 Express 中按路由设置 Cache-Control,区分静态资源与动态接口:
- 静态资源(长期缓存,配合文件名哈希):
- app.use(‘/static’, express.static(‘public’, { maxAge: ‘365d’, immutable: true } ));
- 动态接口(不缓存或短缓存):
- app.get(‘/api/data’, (req, res) => { res.set(‘Cache-Control’, ‘no-store’); // 或 ‘private, max-age=60’ res.json({ ts: Date.now() } ); } );
- 静态资源(长期缓存,配合文件名哈希):
- 在 Koa 中使用 ctx.set 设置相同响应头;在 Hapi 可在路由 options 中配置缓存插件或 cache.expiresIn。
- 建议组合策略:
- 对带内容哈希的静态资源使用:public, max-age=31536000, immutable
- 对频繁变动的页面/接口使用:no-store 或 private, max-age=0, must-revalidate
- 对可共享但对单用户私有的数据:private, max-age=60
四 配置数据层缓存
- 以 Redis 为例,作为外部缓存提升读多写少场景的性能:
- 安装与启动:
- sudo apt update & & sudo apt install -y redis-server
- sudo systemctl enable --now redis-server
- redis-cli ping 应返回 PONG
- 在 Node.js 中使用 ioredis 读写缓存(TTL 示例为 60 秒):
- 安装:npm i ioredis
- 代码示例:
- const Redis = require(‘ioredis’);
- const redis = new Redis();
- async function getData(id) {
const key =
user:${ id}; let data = await redis.get(key); if (data) return JSON.parse(data); data = await db.query(‘SELECT …’); // 伪函数 await redis.set(key, JSON.stringify(data), ‘EX’, 60); return data; }
- 安装与启动:
- 适用场景:会话存储、热点数据、计算结果、接口响应缓存等。
五 持续集成中的缓存优化
- 在 GitHub Actions 等 CI 中缓存依赖目录,显著缩短安装耗时:
- 示例(npm):
-
- uses: actions/cache@v3 with: path: ~/.npm key: ${ { runner.os } } -node-${ { hashFiles(‘**/package-lock.json’) } } restore-keys: ${ { runner.os } } -node-
-
- 可叠加缓存构建产物目录(如 dist/、build/)以加速后续步骤。
- 示例(npm):
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Ubuntu上配置Node.js缓存策略
本文地址: https://pptw.com/jishu/762535.html
