Как настроить и использовать кэширование в Django

«Как настроить и использовать кэширование в Django» — вопрос из категории Django, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Django встроен мощный фреймворк кэширования. Процесс состоит из настройки и применения на разных уровнях.

Шаг 1: Настройка в settings.py

Сначала необходимо определить бэкенд кэша. Выбор зависит от задачи:

  • LocMemCache: Локальная память процесса. Быстро, но не разделяется между процессами. Идеально для разработки.
  • FileBasedCache: Файловая система. Медленнее, но надежно.
  • DatabaseCache: База данных. Легко настроить, но является самым медленным вариантом.
  • RedisCache / MemcachedCache: Внешние in-memory хранилища. Рекомендуются для production благодаря высокой производительности.

Пример конфигурации для Redis:

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

Шаг 2: Способы использования

1. Низкоуровневый API Для кэширования результатов вычислений или запросов к БД.

from django.core.cache import cache

def get_complex_data():
    data = cache.get('my_complex_data_key')
    if data is None:
        # Логика получения данных (например, из БД)
        data = ... 
        cache.set('my_complex_data_key', data, timeout=3600) # Кэш на 1 час
    return data

2. Кэширование представлений (Views) Декоратор cache_page кэширует всю страницу целиком.

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)  # Кэшировать на 15 минут
def my_view(request):
    # ...

3. Кэширование фрагментов шаблона Тег {% cache %} позволяет кэшировать ресурсоемкие части шаблона, например, боковую панель с категориями.

{% load cache %}

{% cache 500 sidebar %}
    <!-- Этот фрагмент будет закэширован на 500 секунд -->
    ... sidebar content ...
{% endcache %}