Какие типы данных поддерживает Redis и в каких сценариях их применяют?

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

Ответ

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.