gpt4 book ai didi

node.js - redis/memcached 缓存与 Etag 缓存有何不同?

转载 作者:行者123 更新时间:2023-12-05 04:06:03 24 4
gpt4 key购买 nike

我可以看到 restful 有一个名为 Etags 的内置缓存机制,那么为什么我们需要使用 redis 或 memcached 来缓存端点。添加到 etags 我们可以检查资源是否已修改。

这里是示例redis缓存代码

const getBook = (req, res) => {
let isbn = req.query.isbn;
let url = `https://www.googleapis.com/books/v1/volumes?q=isbn:${isbn}`;
return axios.get(url)
.then(response => {
let book = response.data.items;
// Set the string-key:isbn in our cache. With he contents of the cache : title
// Set cache expiration to 1 hour (60 minutes)
client.setex(isbn, 3600, JSON.stringify(book));

res.send(book);
})
.catch(err => {
res.send('The book you are looking for is not found !!!');
});
};

const getCache = (req, res) => {
let isbn = req.query.isbn;
//Check the cache data from the server redis
client.get(isbn, (err, result) => {
if (result) {
res.send(result);
} else {
getBook(req, res);
}
});
}

app.get('/book', getCache);

最佳答案

Redis 不会缓存您的端点。它正在缓存端点内完成的工作。在此示例中,Redis 被用作内部数据存储来保存 Google 查询 ISBN 的结果。这是一种用于加速 /book 端点的内存技术。

完成此查询的工作并生成资源(您的自定义图书响应)后,您就可以为您提供给客户的最终资源创建 ETag。


Redis 通常使用时间戳来提供较小的动态内容(计算、对象、模板),以便在近实时和实时应用程序中使用。如果您知道何时您的资源发生变化,则最好将其用作缓存。然后你可以清空缓存,并用新值填充它。它可以设置过期 header 以防止将来对同一资源的请求。只有缓存未命中是昂贵的。

实体标签 (ETag) 不是缓存。它们可以防止您的服务器浪费处理和带宽。 ETag 是资源的 MD5 哈希值,通常用于较大的静态内容:图形、样式表、脚本、呈现的页面和视频。如果您不知道何时资源发生变化,或者您无法控制缓存,则最好使用 ETag。您的资源服务器将在第一个响应中设置一个 ETag header 。当客户端请求具有相同哈希值的资源时,服务器可以仅使用 header 进行响应:304 Not Modified。只有第一个电话很贵。

关于node.js - redis/memcached 缓存与 Etag 缓存有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50404499/

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