1. Вопрос:
Что такое Redis? Какие его основные особенности?
Ответ:
Redis (Remote Dictionary Server) — это высокопроизводительное NoSQL-хранилище данных типа «ключ-значение» с открытым исходным кодом. Основные особенности:
- Хранение данных в оперативной памяти (in-memory) — высокая скорость.
- Богатый набор структур данных (строки, списки, множества, хеши и др.).
- Опциональная персистентность на диск.
- Поддержка репликации, транзакций, Lua-скриптов, Pub/Sub.
- Работа в режиме кластера и сентинеля для отказоустойчивости.
2. Вопрос:
Какие типы данных поддерживает Redis?
Ответ:
Redis поддерживает следующие основные типы:
- String — строка (до 512 МБ).
- List — список строк, упорядоченный по вставке.
- Set — неупорядоченное множество уникальных строк.
- Hash — хеш-таблица (поле‑значение).
- Sorted Set — множество с оценкой (score), упорядоченное по ней.
- Bitmap, HyperLogLog, Stream, Geospatial — дополнительные типы.
3. Вопрос:
В чём принципиальная разница между Redis и Memcached?
Ответ:
- Данные: Redis хранит множество структур, Memcached — только строки.
- Персистентность: Redis может сохранять данные на диск, Memcached — только in‑memory, при перезапуске теряет всё.
- Репликация/кластеризация: Redis из коробки поддерживает репликацию, сентинель и кластер; Memcached не имеет встроенных механизмов.
- Производительность: Memcached быстрее для простых get/set, Redis богаче функционально.
4. Вопрос:
Что такое Redis Strings? Приведите примеры использования.
Ответ:
Strings — базовый тип, хранит любые данные: текст, числа, сериализованные объекты, бинарные данные. Команды: SET, GET, INCR, DECR, APPEND и т.д.
Примеры:
- Кэширование HTML-фрагментов.
- Счётчики (просмотры, лайки) — атомарный инкремент.
- Хранение сессий пользователей.
5. Вопрос:
Как работают списки (Lists) в Redis? Основные команды.
Ответ:
Списки реализованы как связные списки строк. Поддерживают вставку/удаление с обоих концов. Команды:
- LPUSH / RPUSH — добавить слева/справа.
- LPOP / RPOP — удалить и вернуть элемент.
- LRANGE — получить подмножество.
- LLEN — длина списка.
Используются для очередей, логов, timeline.
6. Вопрос:
Для чего используются множества (Sets) в Redis?
Ответ:
Sets — неупорядоченные коллекции уникальных строк. Быстрые операции добавления, удаления, проверки принадлежности и множественные операции (пересечение, объединение, разность).
Примеры:
- Хранение тегов поста.
- Реализация лайков (каждый пользователь — элемент).
- Уникальные посетители за день.
7. Вопрос:
Что такое хеши (Hashes) в Redis? Какие у них преимущества?
Ответ:
Hashes — структура «поле‑значение» внутри одного ключа. Позволяет хранить объекты без сериализации всего объекта.
Преимущества:
- Экономия памяти по сравнению со множеством отдельных ключей.
- Возможность читать/писать отдельные поля.
- Атомарные операции над полями.
Пример: хранение профиля пользователя (поля: name, email, age).
8. Вопрос:
Как работают сортированные множества (Sorted Sets)? Приведите пример.
Ответ:
Каждому элементу Sorted Set назначается числовой score, по которому множество автоматически сортируется. Элементы уникальны.
Команды: ZADD, ZRANGE, ZRANK, ZSCORE и др.
Пример: лидерборд игры — игроки с очками (score = очки), быстрое получение топа.
9. Вопрос:
Что такое Redis Streams? Для чего нужны?
Ответ:
Streams — лог-подобная структура для хранения сообщений с последовательной записью. Поддерживает группы потребителей, подтверждения обработки, диапазонный запрос.
Используются для:
- Очередей событий (event sourcing).
- Обмена сообщениями между микросервисами.
- Аудита действий пользователей.
10. Вопрос:
Как Redis обеспечивает персистентность данных?
Ответ:
Два основных механизма:
- RDB (Redis Database) — снапшоты всего набора данных в заданные интервалы. Компактный файл, удобен для бэкапов.
- AOF (Append Only File) — журнал всех записывающих команд, воспроизводимый при старте. Обеспечивает более высокую сохранность (можно настроить fsync).
Можно использовать одновременно.
11. Вопрос:
В чём разница между RDB и AOF? Когда что выбирать?
Ответ:
RDB: быстрее при восстановлении больших данных, занимает меньше места, но возможна потеря изменений за последние минуты.
AOF: гибкая настройка сохранности (потеря максимум одной секунды), файл может быть перезаписан (BGREWRITEAOF), но медленнее RDB и обычно больше объём.
Выбор: RDB — для бэкапов, AOF — если важна минимальная потеря данных, комбинированный режим даёт баланс.
12. Вопрос:
Что такое Redis replication? Как работает мастер-ведомый?
Ответ:
Репликация — асинхронное копирование данных с мастера на одну или несколько реплик.
Процесс:
- Реплика подключается к мастеру и отправляет SYNC (или PSYNC для частичной синхронизации).
- Мастер создаёт RDB-снапшот и отправляет его, затем передаёт все новые команды.
- После полной синхронизации реплика применяет команды, сохраняя актуальность.
Используется для масштабирования чтения и отказоустойчивости.
13. Вопрос:
Что такое Redis Sentinel? Как он обеспечивает высокую доступность?
Ответ:
Sentinel — система мониторинга, уведомлений и автоматического переключения при отказе мастера (failover).
Задачи:
- Постоянная проверка доступности мастеров и реплик.
- Автоматическое повышение реплики до мастера при сбое.
- Перенастройка клиентов через уведомления о новом мастере.
Для надёжности запускают нечётное количество сентинелей (минимум 3).
14. Вопрос:
Что такое Redis Cluster? Как распределяются данные?
Ответ:
Redis Cluster — распределённая реализация с автоматическим шардированием.
- Данные разбиваются на 16384 слота (hash slot).
- Каждый узел обслуживает подмножество слотов.
- Поддерживает репликацию (каждый мастер имеет реплики).
- Клиент может обращаться к любому узлу; при запросе к «чужому» слоту возвращается перенаправление -MOVED.
Обеспечивает линейную масштабируемость и частичную отказоустойчивость.
15. Вопрос:
Как Redis обрабатывает истечение срока действия ключей (expiry)?
Ответ:
У каждого ключа может быть задан TTL (time to live) через EXPIRE, SETEX и др. Redis удаляет ключи двумя способами:
- Пассивное удаление — при попытке доступа к просроченному ключу он удаляется и возвращается nil.
- Активное удаление — периодически (каждые 100 мс) Redis случайно выбирает 20 ключей с TTL, удаляет просроченные; если >25% ключей удалено, повторяет.
16. Вопрос:
Какие стратегии удаления устаревших ключей при переполнении памяти (eviction policies)?
Ответ:
Redis позволяет настроить политику вытеснения, когда память заполнена (параметр maxmemory-policy):
- noeviction — ошибка на запись.
- allkeys-lru — удаляет наименее недавно используемые ключи из всех.
- volatile-lru — только среди ключей с TTL.
- allkeys-lfu, volatile-lfu — по частоте использования.
- allkeys-random, volatile-random — случайно.
- volatile-ttl — с наименьшим TTL.
17. Вопрос:
Что такое транзакции в Redis? Как работают MULTI, EXEC, WATCH?
Ответ:
Транзакции в Redis — не изолированные как в SQL, а пакетное выполнение команд.
- MULTI — начало транзакции; последующие команды ставятся в очередь.
- EXEC — атомарное выполнение всех накопленных команд (не прерываются командами других клиентов).
- WATCH — оптимистическая блокировка: проверяет, не изменились ли наблюдаемые ключи; если изменены — EXEC отменяется.
Ошибки в очереди не откатывают выполненные команды.
18. Вопрос:
Что такое Lua-скрипты в Redis? Какие преимущества?
Ответ:
Redis позволяет выполнять Lua-скрипты на стороне сервера через команду EVAL.
Преимущества:
- Атомарность — скрипт выполняется целиком без прерываний.
- Снижение сетевых задержек — несколько операций за один запрос.
- Повторное использование — скрипты можно загружать командой SCRIPT LOAD и вызывать по SHA1.
Используются для сложных манипуляций с данными, кастомных команд.
19. Вопрос:
Как оптимизировать производительность Redis?
Ответ:
- Использовать правильные структуры данных (например, Hashes вместо множества String).
- Включить appendfsync в режим everysec для баланса скорости и надёжности AOF.
- Избегать команд с большой временной сложностью (O(N)) для длинных ключей (SMEMBERS, KEYS).
- Использовать SCAN вместо KEYS.
- Включать maxmemory и подходящую политику вытеснения.
- Минимизировать сетевые задержки: пайплайны, объединение команд, Lua.
- Мониторить latency и медленные запросы (SLOWLOG).
20. Вопрос:
Какие команды для мониторинга состояния Redis?
Ответ:
- INFO — статистика по серверу, памяти, репликации и т.д.
- MONITOR — поток всех команд в реальном времени (тяжёлая команда, только для отладки).
- SLOWLOG — просмотр медленных запросов.
- CLIENT LIST — информация о подключениях.
- MEMORY STATS — детали по использованию памяти.
- LATENCY — инструменты для измерения задержек.
21. Вопрос:
Что такое Pub/Sub в Redis? Приведите пример.
Ответ:
Pub/Sub — парадигма обмена сообщениями, где издатели отправляют сообщения в каналы, а подписчики получают их.
Команды: SUBSCRIBE channel, PUBLISH channel message.
Пример: уведомления в реальном времени (например, обновление ленты новостей). Важно: сообщения не сохраняются — если подписчик не в сети, он их не получит.
22. Вопрос:
Как Redis поддерживает кэширование? Какие стратегии часто используют?
Ответ:
Redis идеален для кэша благодаря скорости. Распространённые стратегии:
- Cache‑Aside (Lazy Loading) — приложение проверяет Redis, если нет — загружает из БД и кладёт в Redis.
- Write-Through — данные пишутся одновременно в БД и Redis.
- Write-Behind — данные сначала в Redis, асинхронно в БД.
TTL ключей управляет актуальностью.
23. Вопрос:
Как работает Redis Persistence при использовании AOF с параметром appendfsync?
Ответ:
Параметр appendfsync определяет, как часто fsync вызывается для записи буфера AOF на диск:
- always — fsync после каждой команды; максимальная сохранность, низкая скорость.
- everysec — fsync раз в секунду; баланс (потеря до секунды).
- no — fsync не инициируется Redis, полагается на ОС; высокая скорость, риск потери последних данных.
24. Вопрос:
Что такое Redis Modules? Приведите примеры популярных модулей.
Ответ:
Redis Modules — динамические библиотеки, расширяющие функциональность Redis.
Примеры:
- RediSearch — полнотекстовый поиск и вторичные индексы.
- RedisJSON — работа с JSON документами.
- RedisTimeSeries — хранение и анализ временных рядов.
- RedisGraph — графовая БД на основе проперти-графов.
- RedisBloom — структуры данных Bloom Filter, Cuckoo Filter и др.
25. Вопрос:
Какие лучшие практики безопасности Redis?
Ответ:
- Не запускать Redis от суперпользователя.
- Установить пароль на подключение (requirepass).
- Переименовать/заблокировать опасные команды (FLUSHALL, KEYS, CONFIG) через rename-command.
- Использовать изоляцию сети: брандмауэр, привязка к localhost (bind 127.0.0.1), отключение публичного доступа.
- Включить TLS-шифрование (Redis 6+).
- Регулярно обновлять версию Redis.
- Использовать отдельные экземпляры для разных приложений/окружений.
Страховка на собеседовании
Знание есть, но стресс мешает?
Бесплатное сообщество для прокачки карьеры в IT
Подпишись на https://t.me/IT_Interview_Partner_Bot
Подпишись на https://t.me/LyakhovEugene