Ответ
Redis — это не просто key-value хранилище, его сила в поддержке различных структур данных в качестве значений. Выбор правильной структуры — ключ к эффективному использованию Redis.
Основные типы данных и команды:
Strings (Строки)
- Описание: Бинарно-безопасные строки. Подходят для кэширования HTML, простых значений, счётчиков.
- Команды:
SET
,GET
,INCR
/DECR
(атомарные инкремент/декремент),MSET
/MGET
(установка/получение нескольких ключей за раз).
Lists (Списки)
- Описание: Упорядоченная коллекция строк (как в Go
[]string
). Идеальны для реализации очередей (FIFO) или стеков (LIFO). - Команды:
LPUSH
/RPUSH
(добавить в начало/конец),LPOP
/RPOP
(извлечь из начала/конца),LRANGE
(получить срез списка),LLEN
(длина списка).
- Описание: Упорядоченная коллекция строк (как в Go
Hashes (Хэши)
- Описание: Карта (map) из строковых полей и строковых значений. Отлично подходят для хранения объектов, например, профиля пользователя.
- Команды:
HSET
,HGET
,HGETALL
(получить все поля и значения),HDEL
(удалить поле),HINCRBY
(инкремент значения поля).
Sets (Множества)
- Описание: Неупорядоченная коллекция уникальных строк.
- Команды:
SADD
(добавить элемент),SMEMBERS
(получить все элементы),SISMEMBER
(проверить наличие),SREM
(удалить элемент),SINTER
/SUNION
(пересечение/объединение множеств).
Sorted Sets (Упорядоченные множества)
- Описание: Как и множества, хранят уникальные строки, но у каждого элемента есть
score
(число), по которому коллекция отсортирована. Идеальны для таблиц лидеров (leaderboards), временных шкал. - Команды:
ZADD
(добавить элемент с его score),ZRANGE
/ZREVRANGE
(получить диапазон по рангу, по возрастанию/убыванию),ZRANGEBYSCORE
(получить диапазон по score),ZRANK
(узнать ранг элемента).
- Описание: Как и множества, хранят уникальные строки, но у каждого элемента есть
Общие команды для управления ключами:
DEL key1 key2 ...
: Удалить один или несколько ключей.EXPIRE key seconds
: Установить время жизни (TTL) для ключа.TTL key
: Узнать, сколько секунд осталось жить ключу.KEYS pattern
: Поиск ключей по шаблону (не рекомендуется в production из-за блокировки сервера).SCAN cursor [MATCH pattern]
: Безопасная итерация по ключам, предпочтительнееKEYS
.
Пример работы с Redis в Go (библиотека go-redis
):
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
})
// Работа со строкой
err := client.Set(ctx, "user:1:name", "Alex", 0).Err()
// Работа с хэшем
err = client.HSet(ctx, "user:1", "email", "alex@example.com").Err()
// Получение данных
name, err := client.Get(ctx, "user:1:name").Result()
email, err := client.HGet(ctx, "user:1", "email").Result()