Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Redis : memcached, cache, redis

Какие подходы используются для реализации кеширования и какие инструменты при этом применяются?

Этот вопрос проверяет понимание основных стратегий кеширования и знание типичных инструментов (Redis, in-memory, HTTP-кеш, CDN).

Короткий ответ

Кеширование — это сохранение уже вычисленных или полученных данных, чтобы не обращаться каждый раз к “дорогому” источнику (БД, внешнему API, тяжёлым расчётам).
Используются разные подходы: кеширование в памяти приложения, кеширование в Redis/Memcached, HTTP-кеширование, кеширование на уровне БД и CDN для статики.
Инструменты: Redis, Memcached, встроенные фреймворковые кеши (Django cache, Flask-caching), reverse-proxy (Nginx), CDN.
Кеширование ускоряет приложение и снижает нагрузку на базу и внешние сервисы, но требует аккуратной стратегии инвалидции (“invalidation”).

Длинный ответ

Кеширование — один из ключевых способов оптимизации производительности. Идея проста: если результат операции меняется редко, его можно сохранить и переиспользовать, вместо того чтобы каждый раз считать заново.


Основные подходы к кешированию

  1. Кеширование в памяти приложения (in-memory cache).

  2. Кеширование во внешнем хранилище (Redis, Memcached).

  3. HTTP-кеширование (заголовки Cache-Control, ETag).

  4. Кеширование на уровне БД (materialized views, кеширование запросов).

  5. Кеширование на уровне инфраструктуры (CDN, reverse proxy).


1. In-memory cache

Используется, когда:

  • один экземпляр приложения;

  • данных не очень много;

  • не критично, если кеш потеряется при рестарте.

Пример на Python — LRU-кеш через functools.lru_cache:

python

from functools import lru_cache

@lru_cache(maxsize=1024)
def get_user(user_id):
    # дорогой запрос в БД
    ...

Плюсы:

  • очень быстро;
    Минусы:

  • не шарится между несколькими инстансами.


2. Redis / Memcached

Используются как внешний кеш-сервис.
Подходят для микросервисов и множества инстансов приложения.

Пример использования Redis в Python:

python

import redis
import json

r = redis.Redis(host="redis", port=6379)

def get_user_cached(user_id):
    key = f"user:{user_id}"
    data = r.get(key)
    if data:
        return json.loads(data)

    user = load_user_from_db(user_id)
    r.setex(key, 60, json.dumps(user))  # TTL 60 секунд
    return user

3. HTTP-кеширование

Работает на уровне протокола HTTP.
Используются заголовки:

  • Cache-Control

  • ETag

  • Last-Modified

Пример (FastAPI / Flask / Django) — выставление заголовков, чтобы браузер или прокси мог кэшировать ответ.


4. Кеширование на уровне БД

Примеры:

  • материализованные представления (materialized views);

  • сохраняемые результаты тяжёлых запросов;

  • Query cache (в некоторых СУБД и ORM).


5. CDN и reverse proxy

CDN (Cloudflare, Akamai, AWS CloudFront) кеширует статику: картинки, js, css.
Reverse прокси (Nginx, Varnish) может кэшировать HTTP-ответы приложений.


Стратегии кеширования

  • Cache-aside (lazy loading): приложение сначала смотрит в кеш, если нет — идёт в источник, кладёт в кеш.

  • Write-through: при записи сразу обновляется кеш.

  • Write-back: сначала пишем в кеш, потом асинхронно в БД.


Проблема инвалидации

Сложная часть кеширования — когда и как очищать кеш:

  • по TTL (время жизни ключа);

  • при изменении исходных данных (явное удаление ключей);

  • через версии ключей (добавляем версию к ключу).


Вывод

Кеширование — мощный инструмент для ускорения приложений и снижения нагрузки. На практике чаще всего используют Redis/Memcached плюс in-memory кеш, а также HTTP- и CDN-кеширование для статики и публичных API.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Redis

    Redis

Ключевые слова

#memcached

#cache

#redis

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.