Каковы основные преимущества и недостатки использования Redis?

«Каковы основные преимущества и недостатки использования Redis?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Преимущества Redis:

  • Высокая производительность: Данные хранятся в оперативной памяти (in-memory), что обеспечивает скорость в микросекундах.
  • Богатые структуры данных: Поддерживает строки, хэши, списки, множества, отсортированные множества, битовые массивы, HyperLogLogs, потоки.
    SET user:1000 "John"
    HSET user:1001 name "Alice" age 30
    LPUSH tasks "task1"
    ZADD leaders 100 "player1"
  • Атомарные операции: Все команды атомарны, что упрощает реализацию счетчиков, блокировок, очередей.
  • Продвинутые функции: TTL (время жизни ключей), публикация/подписка (Pub/Sub), транзакции (MULTI/EXEC), Lua-скриптинг.
  • Масштабируемость: Поддержка репликации (master-slave) и кластеризации (автоматическое шардирование с Redis Cluster).

Недостатки и ограничения:

  • Ограничение объемом RAM: Стоимость хранения больших объемов данных высока. Данные должны "помещаться" в память.
  • Отсутствие сложных запросов: Нет JOIN, агрегаций, сложных WHERE-условий как в реляционных СУБД.
  • Персистентность — компромисс: Механизмы сохранения на диск (RDB snapshots, AOF log) могут влиять на производительность или приводить к потере данных при сбое.
  • Single-threaded ядро: Команды выполняются последовательно, что может стать узким местом для CPU-интенсивных операций.

Типичные сценарии использования: Кэширование, сессии, лидерборды, очереди задач (на списках), rate limiting, геопространственные данные.