gpt4 book ai didi

node.js - 在 express 中缓存响应

转载 作者:可可西里 更新时间:2023-11-01 09:13:42 25 4
gpt4 key购买 nike

我在 express 中缓存响应时遇到了一些真正的麻烦……我有一个端点收到大量请求(大约 5k rpm)。此端点从 mongodb 获取数据并加快速度我想将完整的 json 响应缓存 1 秒,以便每秒只有第一个请求访问数据库,而其他请求则从缓存中提供。

当抽象出问题的数据库部分时,我的解决方案如下所示。我在 redis 中检查缓存的响应。如果找到一个,我就上 table 。如果不是我生成它,发送它并设置缓存。超时时间太模拟数据库操作了。

app.get('/cachedTimeout', function(req,res,next) {
redis.get(req.originalUrl, function(err, value) {
if (err) return next(err);
if (value) {
res.set('Content-Type', 'text/plain');
res.send(value.toString());
} else {
setTimeout(function() {
res.send('OK');
redis.set(req.originalUrl, 'OK');
redis.expire(req.originalUrl, 1);
}, 100);
}
});
});

问题在于,这不仅会使第一个请求每秒都命中数据库。相反,所有在我们有时间设置缓存之前(100 毫秒之前)进入的请求都会访问数据库。当向其添加实际负载时,它确实会爆炸,响应时间约为 60 秒,因为很多请求都落后了。

我知道这可以通过像 varnish 这样的反向代理来解决,但目前我们在 heroku 上托管,这使得这样的设置变得复杂。

我想做的是在 express 中做一些反向代理缓存。我希望这样,所有在初始请求(生成缓存)之后进入的请求都将等待缓存生成完成,然后再使用相同的响应。

这可能吗?

最佳答案

在您的 node.js 应用程序之上使用代理层。 Vanish Cache会是一个不错的选择与Nginx一起工作至 serve your application .

关于node.js - 在 express 中缓存响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18458774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com