Ответ
Redis — это не просто key-value хранилище, а структурированная база данных. Каждый тип данных оптимизирован под конкретные задачи:
| Тип данных | Описание | Типичный сценарий использования | Пример команды (Redis CLI) |
|---|---|---|---|
| String | Простая пара ключ-значение. Может быть строкой, числом или бинарными данными. | Кэширование HTML-фрагментов, счетчики, сессии. | SET user:1000 "John" INCR page_views |
| List | Список строк, упорядоченный по порядку вставки. Поддерживает операции с головы и хвоста. | Очереди задач (FIFO), лента новостей (LIFO). | LPUSH tasks "task1" RPOP tasks |
| Set | Неупорядоченная коллекция уникальных строк. Поддерживает пересечения, объединения. | Хранение тегов, уникальных посетителей страницы, «друзей» пользователя. | SADD article:123:tags "tech" "redis" |
| Hash | Карта полей и значений (как объект). Идеален для представления объектов. | Хранение данных пользователя (имя, email, баллы) в одном ключе. | HSET user:1000 name "John" age 30 |
| Sorted Set (Zset) | Set, где каждый элемент имеет числовой score для сортировки. |
Рейтинги, лидерборды, временные линии с сортировкой по дате. | ZADD leaderboard 1500 "player1" |
| Bitmap | Массив битов. Операции на уровне битов очень эффективны по памяти. | Статистика посещений за день (бит на пользователя), анализ аудитории. | SETBIT visits:2024-01-01 100 1 |
| HyperLogLog | Вероятностная структура для подсчета уникальных элементов с минимальной памятью. | Подсчет уникальных посещений страницы за день с допустимой погрешностью ~1%. | PFADD visitors:day "192.168.1.1" |
| Stream (с Redis 5.0) | Лог-ориентированная структура, похожая на Kafka topic. | Асинхронная обработка событий, аудит-логи, обмен сообщениями между микросервисами. | XADD orders * user_id 1000 status paid |
На практике я часто комбинирую типы. Например, для кэша страницы — String, для корзины покупок — Hash, а для топ-10 товаров — Sorted Set.