Как Redis хранит данные и какие основные структуры данных поддерживает?

Ответ

Redis — это in-memory (хранит данные в оперативной памяти) база данных типа ключ-значение. Это обеспечивает сверхбыстрый доступ к данным. Для долговечности (persistence) можно настроить сохранение данных на диск.

Redis поддерживает множество структур данных, выходя за рамки простого "ключ-значение":

Основные типы данных:

  1. Strings — базовый тип. Может хранить текст, сериализованные объекты или бинарные данные размером до 512MB.
    SET user:1:name "John Doe"
  2. Lists — упорядоченные по вставке списки строк. Идеальны для реализации очередей.
    LPUSH tasks "task:1"
    RPUSH tasks "task:2"
  3. Sets — неупорядоченные коллекции уникальных строк. Позволяют выполнять операции над множествами (объединение, пересечение).
    SADD user:1:tags "golang" "redis"
  4. Hashes — структуры для хранения полей и их значений. Отлично подходят для представления объектов.
    HSET user:1000 name "Alice" age 30
  5. Sorted Sets (ZSETs) — множества, где каждый элемент имеет весовой коэффициент (score), по которому коллекция отсортирована. Идеальны для таблиц лидеров.
    ZADD leaderboard 1980 "player1" 2150 "player2"

Специализированные типы данных:

  • Streams: лог-подобная структура для работы с потоками событий.
  • Bitmaps и HyperLogLogs: для статистических вычислений с экономией памяти (например, подсчет уникальных посетителей).
  • Geospatial: для хранения и запроса гео-координат.

Персистентность:

  • RDB (Redis Database): создает снимки (snapshots) всей базы данных через определенные интервалы. Быстрое восстановление, но возможна потеря последних данных.
  • AOF (Append Only File): записывает в лог каждую операцию изменения данных. Более надежно, но файл может быть больше, а восстановление — медленнее.

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