缓存来自Node / Express / Redis的gzipped响应

时间:2013-10-15 09:54:15

标签: node.js caching express redis

我的要求是每天生成多个用户访问的报告。 数据仅每24小时更改一次。 目前,我使用Node从存储在Redis中的数据创建报告,并生成使用Express的Compress()方法压缩的响应。 创建和压缩这些响应大约需要40秒(响应大约是4MB的JSON未压缩) 我的偏好是将这些响应缓存/存储在文件系统或内存中一段时间​​。 我不想为此实现Varnish或其他反向代理,那么有人可以建议另一种有效缓存响应的方法吗? 提前谢谢。

1 个答案:

答案 0 :(得分:3)

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

我只需要定期更新它,大约每10分钟更新一次,但GZipping响应花了很多时间,所以我会定期抓取数据,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);
});