Сергей Жигалов
Сделать мое приложение на порядок быстрее потратив на это несколько часов.
Пережить нагрузку в черную пятницу.
Статика (HTTP запросы)
Получение данных
Шаблоны
Результаты вычислений
var app = express();
app.get('/', (req, res) => {
fetchProducts()
.then(data => res.json(data));
});
app.listen(3000);
var cache;
app.get('/', (req, res) => {
cache = cache || fetchProducts();
cache
.then(data => res.json(data))
.catch(err => cache = null);
});
var LRU = require('lru-cache');
var cache = LRU({ maxAge: 3000 });
app.get('/', (req, res) => {
if (!cache.has('coffee')) {
cache.set('coffee', fetchProducts());
}
cache
.get('coffee')
.then(data => res.json(data))
.catch(err => cache.del('coffee'));
});
var redis = require('redis');
var cache = redis.createClient();
bluebird.promisifyAll(
redis.RedisClient.prototype
);
cache.getAsync('coffee')
.then(data => {
if (data) {
return JSON.parse(data);
}
return fetchProducts().then(data => {
client.set('coffee', JSON.stringify(data));
return data;
});
})
.then(data => res.json(data));
Быстрый доступ
"Горячие" данные
Не всегда актуальные
Ограничение по размеру
Hit Rate = Попадание в кэш / Количество запросов
// ...
app.listen(3000);
cache.set('coffee', fetchProducts());
Кэшировать после всех оптимизаций
Кэш - вспомогательная компонента
Все должно работать и без кэша
cache.set('speaker', {
face: ,
name: 'Сергей',
twitter: '@sergey_zhigalov',
email: 'zhigalov@yandex-team.ru'
});