PRO

Как кэшировать результаты запросов в Django (cache framework)?

Django cache framework позволяет временно хранить результаты вычислений, запросов или HTTP-ответов в backend кэша, например Redis, Memcached или локальном хранилище. Основные подходы: низкоуровневый cache API, кэширование view и template fragment caching.
Подробный ответ

Зачем нужен кэш

Кэш помогает не выполнять повторно дорогие операции: сложные SQL-запросы, обращения к внешним API, генерацию HTML или вычисления. Вместо повторного расчёта приложение возвращает сохранённый результат, пока не истечёт TTL или кэш не будет сброшен.

Настройка backend

Настройки кэша задают в словаре CACHES. Для production обычно выбирают Redis или Memcached; локальный in-memory backend удобен для разработки, но не подходит для распределённой среды.

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.redis.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/1',
    }
}

Низкоуровневый API

from django.core.cache import cache

articles = cache.get('published_articles')
if articles is None:
    articles = list(Article.objects.filter(is_published=True))
    cache.set('published_articles', articles, timeout=300)

Кэширование view

from django.views.decorators.cache import cache_page


@cache_page(60 * 5)
def article_list(request):
    ...

Инвалидация кэша

Ключевая часть кэширования — продумать, когда данные устаревают. Кэш можно очищать при изменении модели, через явный cache.delete(), versioned keys или ограниченный TTL. Для критичных данных нельзя полагаться только на большой TTL.

Как ответить на собеседовании

Я настраиваю cache backend, например Redis, и выбираю уровень кэширования: результат функции через cache API, весь view или фрагмент шаблона. При этом заранее определяю ключи, TTL и стратегию инвалидации при обновлении данных.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге