You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Redis中缓存图片和PDF?Node.js实现报错如何解决

问题解答

直接报错的修复方案

你当前抛出的ReferenceError: Busboy is not defined错误是依赖未引入导致的,按两步修复即可:

  1. 安装busboy依赖:
npm install busboy
  1. 在代码顶部引入busboy:
const Busboy = require('busboy');

现有代码的隐藏问题

修复上述错误后,你的缓存逻辑依然无法正常运行,还存在以下问题:

  • Buffer拼接逻辑错误:Buffer.concat()会返回新的Buffer实例,现有代码中fileData.concat([data])没有赋值给fileData,最终只会存储第一块分片数据,导致缓存的文件损坏,需要修改为:
    fileData = Buffer.concat([fileData, data]);
    
  • 存取缓存的key不一致:存入Redis时用的key前缀是files,读取时用的是file,单复数拼写错误,永远读取不到已缓存的内容
  • Redis二进制存取配置缺失:旧版本Node Redis客户端默认会将值转为字符串存储,存取二进制文件需要显式指定编码,存入时第三个参数传入'BUFFER',读取时也指定返回Buffer格式,否则会出现文件转码损坏的问题

该实现方案的合理性

用Redis缓存图片、PDF这类二进制文件的逻辑是完全可行的,Redis的字符串类型最大支持512MB的单值存储,完全覆盖常规的图片、PDF文件大小,适合对热点小文件做缓存降低回源耗时。但不建议用Redis缓存超过100MB的大文件,内存成本过高性价比低。

其他可行的服务端缓存方案

  • 本地文件系统缓存:将拉取到的文件直接存在Node服务本地磁盘,请求时先校验本地是否存在对应文件,不存在再回源拉取,实现简单成本低,适合单节点部署场景
  • Nginx proxy_cache缓存:在Node服务前部署Nginx,使用Nginx原生的proxy_cache模块直接缓存octet-stream类型的响应,无需修改业务代码,缓存命中率高,维护成本低
  • CDN缓存:如果文件允许公开访问,直接接入CDN服务,由CDN自动完成缓存、回源、过期清理逻辑,边缘节点响应速度远高于自建服务缓存,适合生产环境大规模使用

内容的提问来源于stack exchange,提问作者V Aruna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:12:02