Кэширование помогает снизить нагрузку на сервер. Достигается такой эффект путем сохранения результатов часто повторяющихся операций и предоставления клиентам уже готовых ответов.
Например, вместо того чтобы каждый раз извлекать редко меняющиеся данные из таблиц базы данных, вы можете извлечь их один раз и сохранить значения в оперативной памяти. В дальнейшем вы сможете обращаться за данными к ОЗУ, откуда можно получить их гораздо быстрее, чем из базы данных на жестком диске. При изменении значений, сохраненных в кэше, система очищает кэш и заново извлекает эти значения из базы данных для будущих запросов.
Кэш может создаваться для разных уровней стека.
Инструменты кэширования
Memcached — распространенная система кэширования в оперативной памяти.
Redis — это хранилище данных в памяти в виде словаря (с парами ключей и их значений). При помощи таких библиотек как django-redis-cache и django-redis легко настраивается для реализации кэширования.
Ресурсы по теме кэширования
- Caching at Reddit — прекрасный пост, в котором подробно разбирается, как Reddit реализует кэширование своего веб-приложения на Python (а ежемесячное количество просмотров страниц этого приложения исчисляется в миллиардах). В статье поднимаются темы мониторинга, настройки и масштабирования.
- В статье Caching: Varnish or Nginx? вопрос кэширования рассматривается в разрезе выбора обратного прокси-сервера. Разбираются такие вещи, как поддержка SSL и SPDY.
- Caching is Hard, Draw me a Picture. В этой статье вы найдете схемы кэширования веб-запросов. Эти иллюстрации помогут вам лучше понять сам принцип работы кэширующих слоев.
- Хотя кэширование во многих ситуациях бывает очень полезным, не стоит забывать, что у этого приема есть и отрицательные стороны. Многие разработчики их не учитывают, и совершенно напрасно.
- В статье Mastering HTTP caching вы найдете советы более высокого уровня. Там разбирается кэширование динамического и статического контента при помощи CDN и других конфигураций.
Изучение кэширования на практике
- Проанализируйте свое веб-приложение, определите, какие его части работают медленнее всего. Скорее всего, вы обнаружите сложные запросы к базе данных, которые вполне могут быть обработаны и сохранены в памяти для быстрого доступа.
- Используйте для кэширования результатов этих сложных запросов уже имеющееся хранилище в оперативной памяти, в котором хранятся данные сессии.
- Реализуйте схему проверки и очистки кэша, чтобы результаты, подготовленные для отправки пользователям, были точными.