Разбери, где кэш помогает, чем за него платит система и как он ведёт себя при гонках и сбоях. Пройди от cache-aside и структур Redis до stampede, персистентности и блокировок, чтобы выбирать подход под конкретную гарантию и нагрузку.
Оцени кэш через выигрыш и цену: он уменьшает часть обращений к источнику, но добавляет память, сетевой путь и риск устаревших данных. Сопоставь L1, Redis и базу по латентности, общей видимости и последствиям промаха.
Пойми, как Redis обрабатывает команды и почему сложность команды имеет значение при общей последовательной обработке. Используй SCAN для обслуживания ключей, обходи большие значения порциями и отделяй блокирующую работу от обычных соединений.
Выбирай тип Redis под операцию и гарантию: строка для атомарного счётчика, hash для полей сущности, sorted set для ранжирования или временных оценок, Stream для подтверждаемой ленты. Сопоставляй сложность операции, объём состояния и восстановление после сбоя.
Сравни стратегии cache-aside, read/write-through и write-behind по тому, кто читает и пишет источник истины. Разбери гонку между медленным чтением и инвалидацией и выбери способ ограничить устаревание с учётом допустимого окна.
Разбери, как истечение одного ключа может превратиться в stampede, а одна горячая команда или большой ключ - задержать весь Redis. Сопоставь singleflight, jitter, раннее обновление, разбиение данных и репликацию по их разным целям.
Выбери Redis-настройки исходя из роли данных: вытеснение, RDB/AOF и Sentinel/Cluster дают разные свойства. Пойми, какие записи можно потерять при каждом механизме и почему Redis как кэш не должен быть единственной копией критичного состояния.
Разбери ограничения lock через SET NX PX: владелец может пережить TTL, а новый владелец уже начать работу. Сравни lock с fencing token, разберись в pub/sub и Streams, затем проверь, как go-redis ведёт себя при промахе, таймауте и заполненном пуле.