Skip to content

Redis

Описание

Использовал Redis как инфраструктурный компонент в backend-проектах (драйвер для Laravel), а также в качестве ручного управляемого кэширования данных.

Применял в задачах:

  • Redis как backend для кэша;
  • разделение инфраструктурного state и ручного прикладного кэширования;
  • revision-based HTTP/cache схемы для списковых API endpoint-ов;
  • использование Redis для distributed locks;
  • очереди и асинхронная обработка;
  • эксплуатация Redis в Docker-окружении;
  • настройка отдельных logical DB / connection profile под разные задачи.

Redis как cache backend

Использовал Redis как backend для прикладного кэша:

  • хранение временных данных;
  • cache keys с TTL;
  • разделение cache-store и основного application state;
  • работу через framework cache abstraction (фасад Cache);
  • управление прикладной инвалидацией.

Redis использовался как отдельный cache store, а также как часть схем кэширования и coordination-механизмов. На практике это включало и revision-based JSON payload cache с ETag/304, где данные инвалидируются не полной очисткой store, а через bump revision key.

Инфраструктурный Redis state

Использовал Redis как инфраструктурный слой, который создаётся не вручную в бизнес-логике, а через настройки framework/runtime.

Что это включает:

  • хранение сессий;
  • backend для очередей;
  • counters для rate limiter;
  • временные lock-ключи;
  • idempotency/replay state для защиты повторных запросов;
  • разделение таких данных от ручного payload cache.

Ручное HTTP-кэширование

Есть опыт проектирования ручного Redis-backend cache для конкретных HTTP endpoint-ов.

Что использовал на практике:

  • revision-based invalidation;
  • отдельные revision keys и payload keys;
  • TTL для payload и revision state;
  • ETag и 304 Not Modified;
  • разделение публичного и приватного per-user cache;
  • отключение кэша для поисковых/динамичных запросов;
  • реестр endpoint-ов, для которых включён ручной cache.

Ручное кэширование применялось выборочно: для списковых GET endpoint-ов, где чтений больше, чем записей, а инвалидация может быть выражена через bump revision. Это позволяет не очищать весь Redis store при каждом изменении данных. В подобных схемах отдельно хранил revision keys и payload keys с разным TTL, чтобы управлять кэшем точечно и без глобального cache:clear.

Distributed locks

Есть опыт использования Redis для lock-сценариев и защиты от конкурентных гонок.

Что применял на практике:

  • distributed lock через cache abstraction;
  • временные lock key;
  • ограничение времени ожидания;
  • защита от повторной обработки одного и того же действия;
  • coordination между несколькими запросами или процессами.

Пример - idempotency-сценарии, где Redis используется для lock-ов, replay state, окна ожидания и защиты от дублирующей обработки одинаковых запросов.

Redis и очереди

Использовал Redis как backend для очередей.

  • быстрое dispatch/consume взаимодействие;
  • удобная интеграция с queue worker;
  • поддержка асинхронных сценариев;
  • изоляция тяжёлых операций от основного HTTP-request lifecycle.

Redis является частью queue-схемы вместе с отдельным worker-контейнером и background job-процессами.

Docker и эксплуатация

Эксплуатировал Redis в контейнерной схеме:

  • отдельный сервис в docker compose;
  • persistent volume;
  • healthcheck через redis-cli ping;

Итого

На практике чаще всего использовал Redis для:

  • cache backend;
  • distributed locks;
  • очередей;
  • временных технических данных с TTL.

Сайт обновлен и проверен: