Чем Redis/ Memcached кэширование отличается от Etag кэширования?
Я вижу, что 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);
1 ответ
Redis не кэширует вашу конечную точку. Он кэширует работу, выполненную внутри вашей конечной точки. В этом примере Redis используется как внутреннее хранилище данных для сохранения результатов Google для запроса ISBN. Это своего рода техника мемоизации для ускорения вашего
/book
конечная точка.
После того, как вы выполнили работу для этого запроса и сгенерировали ресурс (ваш собственный ответ на книгу), вы можете создать ETags для окончательных ресурсов, которые вы обслуживаете своему клиенту.
Redis обычно использует временную метку для обслуживания небольшого динамического содержимого (вычислений, объектов, шаблонов) для использования в приложениях, работающих почти в реальном времени и в реальном времени. Лучше всего использовать его в качестве кеша, если вы знаете, когда ваши ресурсы меняются. Затем вы можете очистить кеш и заполнить его новыми значениями. Он может установить заголовок expires, чтобы предотвратить будущие запросы того же ресурса. Только промахи кеша обходятся дорого.
Теги сущностей (ETags) не являются кешем. Они не позволяют вашему серверу тратить впустую обработку и пропускную способность. ETags - это MD5-хэши ресурса, которые обычно используются для более крупного статического контента: графики, таблиц стилей, скриптов, визуализированных страниц и видео. ETags лучше всего использовать, если вы не знаете, когда ресурс изменяется, или если у вас нет контроля над кешированием . Ваш сервер ресурсов установит заголовок ETag в первом ответе. Когда клиент запрашивает ресурс с таким же хешем, сервер может ответить только заголовками: 304 Not Modified. Только первый звонок стоит дорого.