Ответ
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()