Типы данных 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
- Структура данных, используемая для алгоритмов оценки кардинальности.
- Часто используется для оценки приблизительного количества уникальных значений.
Битмапы
- Битовый массив, который может выполнять битовые операции над строками.
- Часто используется для битовых операций, таких как реализация фильтров Блума.
Геопространственные индексы
- Обрабатывает геопространственные данные, поддерживает геопространственную индексацию и запросы по радиусу.
- Тип данных журнала, поддерживает данные временных рядов.
- Используется для очередей сообщений и обработки данных в реальном времени.