Типы данных Redis

Redis в основном поддерживает следующие типы данных:

  • string (string):Базовая единица хранения данных, может хранить строки, целые числа или числа с плавающей точкой.
  • hash (hash):Коллекция пар ключ-значение, которая может хранить несколько полей.
  • list (list):Простой список, в котором можно хранить последовательность строковых элементов.
  • set (set):Неупорядоченная коллекция, которая может хранить уникальные строковые элементы.
  • zset (sorted set: ordered set):Похож на set, но с каждым элементом связана его оценка.
  • Bitmaps:Основаны на типе string, позволяют работать с каждым битом.
  • HyperLogLogs:Используются для статистики кардинальности, позволяют оценить количество уникальных элементов во множестве.
  • Geospatial:Используются для хранения информации о географическом местоположении.
  • Publish/Subscribe (Pub/Sub):Шаблон обмена сообщениями, который позволяет клиентам подписываться на каналы сообщений и получать сообщения, опубликованные в этих каналах.
  • Streams:Используются для очередей сообщений и хранения журналов, поддерживают персистентность сообщений и упорядочение по времени.
  • Modules:Redis поддерживает динамическую загрузку модулей для расширения функциональности Redis.

Строка (string)

string — самый базовый тип в Redis. Его можно рассматривать как тот же тип, что и в Memcached: один ключ соответствует одному значению.

Тип string является бинарно безопасным. Это означает, что строки Redis могут содержать любые данные, например изображения JPEG или сериализованные объекты.

Тип string — самый базовый тип данных в Redis. Максимальный размер значения для типа string составляет 512MB.

Основные команды

  • SET key value: Установить значение ключа.
  • GET key: Получить значение ключа.
  • INCR key: Увеличить значение ключа на 1.
  • DECR key: Уменьшить значение ключа на 1.
  • APPEND key value: Добавить значение в конец значения ключа.

Примеры

redis 127.0.0.1:6379> SET example "Example"
OK
redis 127.0.0.1:6379> GET example
"Example"

В приведённых выше примерах мы использовали команды RedisSETиGET. Ключ — example, а соответствующее значение —Example。

Примечание:Ключ может хранить до 512MB.


Хеш (hash)

Хэш Redis — это коллекция пар ключ-значение (key=>value), похожая на небольшую базу данных NoSQL.

Хэш Redis — это таблица отображения полей и значений строкового типа. Хэш особенно подходит для хранения объектов.

Каждый хэш может хранить до 2^32 - 1 пар ключ-значение.

    Основные команды

  • HSET key field value: Установить значение поля в хэш-таблице.
  • HGET key field: Получить значение поля в хэш-таблице.
  • HGETALL key: Получить все поля и значения в хэш-таблице.
  • HDEL key field: Удалить одно или несколько полей из хэш-таблицы.

Примеры

Пример DELИспользуется для удаления ключа, использованного в предыдущем тесте, иначе возникнет ошибка:(error) WRONGTYPE Operation against a key holding the wrong kind of value

redis 127.0.0.1:6379> DEL example
redis 127.0.0.1:6379> HMSET example field1 "Hello" field2 "World"
"OK"
redis 127.0.0.1:6379> HGET example field1
"Hello"
redis 127.0.0.1:6379> HGET example field2
"World"

В примере мы использовали RedisHMSET, HGETкоманды,HMSETзадает дваfield=>valueпар. HGET получает соответствующееполесоответствующеезначение。


Список (list)

Списки Redis — это простые списки строк, отсортированные по порядку вставки. Вы можете добавить элемент в начало (слева) или в конец (справа) списка.

Список может хранить до 2^32 - 1 элементов.

Основные команды

  • LPUSH key value: Вставить значение в начало списка.
  • RPUSH key value: Вставить значение в конец списка.
  • LPOP key: Удалить и получить первый элемент списка.
  • RPOP key: Удалить и получить последний элемент списка.
  • LRANGE key start stop: Получить элементы списка в указанном диапазоне.

Примеры

redis 127.0.0.1:6379> DEL example
redis 127.0.0.1:6379> lpush example redis
(integer) 1
redis 127.0.0.1:6379> lpush example mongodb
(integer) 2
redis 127.0.0.1:6379> lpush example rabbitmq
(integer) 3
redis 127.0.0.1:6379> lrange example 0 10
1) "rabbitmq"
2) "mongodb"
3) "redis"
redis 127.0.0.1:6379>

Множество (set)

Redis Set — это неупорядоченная коллекция строкового типа.

Коллекция реализована через хеш-таблицу, поэтому сложность добавления, удаления и поиска равна O(1).

Основные команды

  • SADD key value: Добавить один или несколько элементов в множество.
  • SREM key value: Удалить один или несколько элементов из множества.
  • SMEMBERS key: Вернуть все элементы множества.
  • SISMEMBER key value: Определить, является ли значение элементом множества.

команда sadd

Добавляет строковый элемент в множество, соответствующее ключу. Возвращает 1 при успехе и 0, если элемент уже присутствует в множестве.

sadd key member

Примеры

redis 127.0.0.1:6379> DEL example
redis 127.0.0.1:6379> sadd example redis
(integer) 1
redis 127.0.0.1:6379> sadd example mongodb
(integer) 1
redis 127.0.0.1:6379> sadd example rabbitmq
(integer) 1
redis 127.0.0.1:6379> sadd example rabbitmq
(integer) 0
redis 127.0.0.1:6379> smembers example

1) "redis"
2) "rabbitmq"
3) "mongodb"

Примечание:В приведённом выше примере rabbitmq был добавлен дважды, но из-за уникальности элементов в множестве второе добавление игнорируется.

Максимальное число элементов в множестве равно 232- 1 (4294967295, каждое множество может хранить более 4 миллиардов элементов).


zset (сортированное множество: упорядоченное множество)

Redis zset, как и set, также является коллекцией элементов строкового типа и не допускает дублирования элементов.

Разница в том, что с каждым элементом связано значение score типа double. Redis использует score для сортировки элементов коллекции от наименьшего к наибольшему.

Элементы zset уникальны, но значения score могут повторяться.

Основные команды

  • ZADD key score value: Добавить один или несколько элементов в сортированное множество или обновить score существующего элемента.
  • ZRANGE key start stop [WITHSCORES]: Вернуть элементы в указанном диапазоне.
  • ZREM key value: Удалить один или несколько элементов из сортированного множества.
  • ZSCORE key value: Вернуть оценку элемента в сортированном множестве.

команда zadd

Добавить элемент в коллекцию; если элемент уже существует в коллекции, обновить соответствующую ему оценку.

zadd key score member 

Примеры

redis 127.0.0.1:6379> DEL example
redis 127.0.0.1:6379> zadd example 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd example 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd example 0 rabbitmq
(integer) 1
redis 127.0.0.1:6379> zadd example 0 rabbitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE example 0 1000
1) "mongodb"
2) "rabbitmq"
3) "redis"

Другие расширенные типы данных

HyperLogLog

  • Структура данных, используемая для алгоритмов оценки кардинальности.
  • Часто используется для оценки приблизительного количества уникальных значений.

Битмапы

  • Битовый массив, который может выполнять битовые операции над строками.
  • Часто используется для битовых операций, таких как реализация фильтров Блума.

Геопространственные индексы

  • Обрабатывает геопространственные данные, поддерживает геопространственную индексацию и запросы по радиусу.
    • Потоки

      • Тип данных журнала, поддерживает данные временных рядов.
      • Используется для очередей сообщений и обработки данных в реальном времени.
      Другие расширения