Что такое кэширование?

Кэширование помогает снизить нагрузку на сервер. Достигается такой эффект путем сохранения результатов часто повторяющихся операций и предоставления клиентам уже готовых ответов.

Например, вместо того чтобы каждый раз извлекать редко меняющиеся данные из таблиц базы данных, вы можете извлечь их один раз и сохранить значения в оперативной памяти. В дальнейшем вы сможете обращаться за данными к ОЗУ, откуда можно получить их гораздо быстрее, чем из базы данных на жестком диске. При изменении значений, сохраненных в кэше, система очищает кэш и заново извлекает эти значения из базы данных для будущих запросов.

Кэш может создаваться для разных уровней стека.

Инструменты кэширования

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 и других конфигураций.

Изучение кэширования на практике

  1. Проанализируйте свое веб-приложение, определите, какие его части работают медленнее всего. Скорее всего, вы обнаружите сложные запросы к базе данных, которые вполне могут быть обработаны и сохранены в памяти для быстрого доступа.
  2. Используйте для кэширования результатов этих сложных запросов уже имеющееся хранилище в оперативной памяти, в котором хранятся данные сессии.
  3. Реализуйте схему проверки и очистки кэша, чтобы результаты, подготовленные для отправки пользователям, были точными.