caching来自Node / Express / Redis的gzip响应

我的要求是每天生成几个用户访问的报告。 数据仅每24小时更换一次。 目前,我使用Node来根据存储在Redis中的数据创build报告,并生成使用Express的Compress()方法压缩的响应。 创build和压缩这些响应需要大约40秒(响应大约是4MB的JSON未压缩)。我的首选是将这些响应caching/存储在文件系统或内存中一段时间​​。 我不想为此仅实现Varnish或其他反向代理,所以任何人都可以提出另一种有效caching响应的方法吗? 提前致谢。

我最近不得不做了类似的事情,我从MongoDB数据库收到一个大的JSON负载,这个数据库将被发送到用户应用程序。

我只需要定期更新它,大约每10分钟一次,但是GZip的响应花了很长时间,所以我周期性地抓取数据,gzip并将其存储起来,在本例中作为对GET请求的响应发送它。

 var zlib = require('zlib'); var Buffer = require('buffer').Buffer; var express = require('express'); var app = express(); var yourData, cachedGzip; // zlib performs gzip compression, passes payload to callback asynchronously zlib.gzip(new Buffer(yourData)), function(err, data){ cachedGzip = data }); // Somewhere later in your app... // Can now use the cached data for gzip responses, example route app.get('/', function(req, res) { res.header('Content-Type', 'application/json'); res.header('Content-Encoding', 'gzip'); res.send(cachedGzip); });