Какие основные типы данных есть в Redis и какие команды для работы с ними вы знаете?

Ответ

Redis — это не просто key-value хранилище, его сила в поддержке различных структур данных в качестве значений. Выбор правильной структуры — ключ к эффективному использованию Redis.

Основные типы данных и команды:

  1. Strings (Строки)

    • Описание: Бинарно-безопасные строки. Подходят для кэширования HTML, простых значений, счётчиков.
    • Команды: SET, GET, INCR/DECR (атомарные инкремент/декремент), MSET/MGET (установка/получение нескольких ключей за раз).
  2. Lists (Списки)

    • Описание: Упорядоченная коллекция строк (как в Go []string). Идеальны для реализации очередей (FIFO) или стеков (LIFO).
    • Команды: LPUSH/RPUSH (добавить в начало/конец), LPOP/RPOP (извлечь из начала/конца), LRANGE (получить срез списка), LLEN (длина списка).
  3. Hashes (Хэши)

    • Описание: Карта (map) из строковых полей и строковых значений. Отлично подходят для хранения объектов, например, профиля пользователя.
    • Команды: HSET, HGET, HGETALL (получить все поля и значения), HDEL (удалить поле), HINCRBY (инкремент значения поля).
  4. Sets (Множества)

    • Описание: Неупорядоченная коллекция уникальных строк.
    • Команды: SADD (добавить элемент), SMEMBERS (получить все элементы), SISMEMBER (проверить наличие), SREM (удалить элемент), SINTER/SUNION (пересечение/объединение множеств).
  5. 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()