Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+661новая вакансия за сутки·58 731вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 712
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 393 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python11 079
  • Облачные технологии8 824
  • QA вакансии2 977
  • Android1 395
  • Инженер данных1 032
  • Продакт-менеджер351

Разработка

  • Backend вакансии1 342
  • iOS1 307
  • AI вакансии660
  • Fullstack вакансии524
  • Frontend вакансии465
  • Mobile вакансии28

По стеку

  • Go6 622
  • Java3 670
  • Kotlin1 199
  • Node.js1 190
  • Rust1 181
  • .NET780
  • PHP329
  • C++301
  • C#211

DevOps и инфраструктура

  • Kubernetes5 251
  • Linux-инфраструктура4 138
  • DevOps вакансии3 024
  • Terraform / IaC2 834
  • Мониторинг и Observability1 406
  • CI/CD917
  • SRE389
  • Кибербезопасность40

Аналитика и данные

  • Аналитик данных586
  • Бизнес-аналитик487
  • Data Scientist458
  • Системный аналитик75

Другие направления

  • Проджект-менеджер114
  • UI/UX дизайн74
  • Ручное тестирование14

По регионам

  • Вакансии в США31 201
  • Вакансии в Европе11 507
  • Работа в России3 630
  • Вакансии в Канаде2 546

По формату

  • Удалённые вакансии47 761
  • Релокация в США31 201
  • Гибридная работа7 699
  • Офисная работа6 071

По уровню

  • Senior вакансии27 027
  • Middle вакансии12 284
  • Junior вакансии4 495

Сейчас нанимают

Все компании
  • Wise196 вакансий
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify38 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме DjangoВсе вопросы
DjangoMiddleПроектирование систем

Как работает система кэширования Django и какие бэкенды она поддерживает?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Django поддерживает бэкенды Memcached, Redis, файловый, in-memory и БД. API: cache.set/get/delete/get_or_set, декораторы @cache_page и @vary_on_headers для view-уровня.

Конфигурация Redis

# settings.py
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.redis.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "TIMEOUT": 300,  # секунды, None = никогда не истекает
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "MAX_ENTRIES": 1000,
        },
    },
    "sessions": {
        "BACKEND": "django.core.cache.backends.redis.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/2",
    },
}

Система кэширования Django

Django предоставляет единый cache API через объект django.core.cache.cache, абстрагирующий конкретный бэкенд. Бэкенд выбирается настройкой CACHES в settings.py.

Поддерживаемые бэкенды

  • django.core.cache.backends.redis.RedisCache — Redis (рекомендуется для прода, Django 4.0+)
  • django.core.cache.backends.memcached.PyMemcacheCache — Memcached
  • django.core.cache.backends.filebased.FileBasedCache — файлы на диске
  • django.core.cache.backends.locmem.LocMemCache — in-process память (по умолчанию, не для прода)
  • django.core.cache.backends.db.DatabaseCache — таблица в БД
  • django.core.cache.backends.dummy.DummyCache — заглушка для разработки

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

from django.core.cache import cache

# Базовые операции
cache.set("user:42:profile", {"name": "Alice"}, timeout=600)
data = cache.get("user:42:profile")  # None если нет

# Атомарный get-or-set
def get_user_stats(user_id):
    key = f"user:{user_id}:stats"
    return cache.get_or_set(
        key,
        lambda: compute_stats(user_id),  # вызывается только при промахе
        timeout=3600,
    )

# Инкремент (атомарный)
cache.set("page:views", 0, timeout=None)
cache.incr("page:views")

# Массовые операции
cache.set_many({"a": 1, "b": 2, "c": 3}, timeout=60)
results = cache.get_many(["a", "b", "c"])  # {"a": 1, "b": 2, "c": 3}
cache.delete_many(["a", "b"])

# Инвалидация по паттерну (только django-redis)
from django_redis import get_redis_connection
con = get_redis_connection("default")
keys = con.keys("user:42:*")
if keys:
    con.delete(*keys)

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

from django.views.decorators.cache import cache_page, never_cache
from django.views.decorators.vary import vary_on_headers, vary_on_cookie

# Кэш на 15 минут
@cache_page(60 * 15)
def article_list(request):
    ...

# Раздельный кэш для аутентифицированных пользователей
@vary_on_cookie
@cache_page(60 * 5)
def dashboard(request):
    ...

# Запрет кэша для приватных страниц
@never_cache
def account_settings(request):
    ...

Кэширование шаблонных фрагментов

{% load cache %}
{% cache 500 sidebar request.user.id %}
    ... дорогой фрагмент ...
{% endcache %}

Подводные камни

  • LocMemCache в проде — значения не разделяются между процессами Gunicorn; каждый воркер имеет собственный кэш, invalidation не работает глобально.
  • Cache stampede — при истечении популярного ключа десятки запросов одновременно вычисляют значение. Решение: cache.get_or_set с блокировкой или django-redis lock.
  • Кэширование объектов QuerySet — кэшируется итерируемый результат, но не ленивый QuerySet. cache.set("qs", qs) выполнит SQL немедленно при сериализации.
  • TIMEOUT=0 означает «немедленно устаревает», а не «никогда». Для бесконечного хранения используйте TIMEOUT=None.
  • vary_on_cookie без логики — если кэш варьируется по cookie, анонимные пользователи с sessionid всё равно получают уникальные ключи, что обнуляет эффективность кэша.
  • Несогласованность при инвалидации — при обновлении модели ключ в кэше остаётся старым. Нужны сигналы post_save/post_delete для явной инвалидации.
  • Конкуренция баз данных кэша — DatabaseCache создаёт write lock при каждой записи; под нагрузкой становится узким местом хуже самих запросов к БД.

Частые вопросы на собеседовании

  • Как Django защищает от SQL-инъекций, CSRF и XSS-атак?
  • Как организовать настройки, secrets и environment-specific config без утечек?
  • Объясните жизненный цикл запроса/ответа в Django — от разрешения URL до HTTP-ответа.
  • Что такое проблема N+1 запросов в Django и как её обнаружить и исправить?

Типичные ошибки

  • Описывать caching только как термин и не показывать механизм на минимальном примере.
  • Игнорировать ошибки, пустые данные, конкурентный доступ или границы транзакции.
  • Не связывать поведение с официальным контрактом Django и реальной эксплуатацией.

Что проверяет интервьюер

  • Объясняет caching через последовательность действий, а не через набор ключевых слов.
  • Приводит короткий кодовый пример или production-сценарий с ожидаемым поведением.
  • Называет хотя бы один риск: производительность, безопасность, транзакции, память или сопровождение.

Как вы знаете этот вопрос?

Проверить себя по теме Django →

Источники

  • https://docs.djangoproject.com/en/5.2/topics/db/models/
  • https://docs.djangoproject.com/en/5.2/topics/http/views/
←Предыдущий вопросКак использовать Celery с Django для обработки фоновых задач?Следующий вопрос→Что такое индексы базы данных в Django и как добавить их к полям модели?

Связанные темы

Djangoapi-designproduction-architecturetechnical-reasoning

Вакансии с этим навыком

  • Middle/Senior Full-Stack Python Engineer (Django) (#5841)
  • Разработчик Python (ИИ-помощник)
  • Junior Fullstack-разработчик (AI-assisted development)
  • Lead Python Developer (Django)
  • Python Team Lead