Ответ
Redis — это in-memory (хранит данные в оперативной памяти) база данных типа ключ-значение. Это обеспечивает сверхбыстрый доступ к данным. Для долговечности (persistence) можно настроить сохранение данных на диск.
Redis поддерживает множество структур данных, выходя за рамки простого "ключ-значение":
Основные типы данных:
- Strings — базовый тип. Может хранить текст, сериализованные объекты или бинарные данные размером до 512MB.
SET user:1:name "John Doe"
- Lists — упорядоченные по вставке списки строк. Идеальны для реализации очередей.
LPUSH tasks "task:1" RPUSH tasks "task:2"
- Sets — неупорядоченные коллекции уникальных строк. Позволяют выполнять операции над множествами (объединение, пересечение).
SADD user:1:tags "golang" "redis"
- Hashes — структуры для хранения полей и их значений. Отлично подходят для представления объектов.
HSET user:1000 name "Alice" age 30
- Sorted Sets (ZSETs) — множества, где каждый элемент имеет весовой коэффициент (score), по которому коллекция отсортирована. Идеальны для таблиц лидеров.
ZADD leaderboard 1980 "player1" 2150 "player2"
Специализированные типы данных:
- Streams: лог-подобная структура для работы с потоками событий.
- Bitmaps и HyperLogLogs: для статистических вычислений с экономией памяти (например, подсчет уникальных посетителей).
- Geospatial: для хранения и запроса гео-координат.
Персистентность:
- RDB (Redis Database): создает снимки (snapshots) всей базы данных через определенные интервалы. Быстрое восстановление, но возможна потеря последних данных.
- AOF (Append Only File): записывает в лог каждую операцию изменения данных. Более надежно, но файл может быть больше, а восстановление — медленнее.
Redis использует преимущественно однопоточную модель для выполнения команд, что гарантирует атомарность операций и избавляет от необходимости блокировок на уровне приложения.