2013-10-15 14 views
2

我的要求是每天生成幾個用戶訪問的報告。 數據僅每24小時更改一次。 目前我使用Node從存儲在Redis中的數據創建報告,並生成使用Express的Compress()方法壓縮的響應。 創建和壓縮這些響應大約需要40秒(響應大約是4MB未壓縮的JSON) 我的偏好是將這些響應緩存/存儲在文件系統或內存中一段時間​​。 我不想爲此僅實現Varnish或其他反向代理,所以任何人都可以提出另一種有效緩存響應的方法嗎? 在此先感謝。緩存來自Node/Express/Redis的gzip響應

+0

也許['express-view-cache'](https://npmjs.org/package/express-view-cache)有用嗎? – robertklep

+0

感謝羅伯特,它看起來像我在找什麼,但作者說這不是生產準備,所以我不願意承諾。我讀過一些其他解決方案,他們建議在壓縮緩衝區中緩存gzip響應,但我還沒有看到任何人做這個的例子。你能評論嗎? – cgarvey

+0

不確定它們是什麼意思的'壓縮緩衝區'。如果你發佈一些鏈接,我會看看它。 – robertklep

回答

2

我最近不得不做一些類似的事情,我從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); 
});