Структура данных серии Redis
Серия Redis
Принцип кэширования и дизайн серии Redis
Типы данных Redis и сценарии приложений
Redis — это система хранения ключей и значений, написанная на языке ANSI C. Тип ключа — строка. Тип данных значения 8 типов данных
-
Общие типы данных
-
строка тип строки
-
список тип списка
-
установить тип коллекции
-
sortedset(zset) тип отсортированного множества
-
тип хеша
-
-
Необычные типы данных
-
растровый тип растрового изображения
-
тип геолокации
-
тип потока
-
-
Уведомление
Команды в Redis нечувствительны к регистру (установить SET), а ключи нечувствительны к регистру (имя ИМЯ).
строка тип строки
Строка Redis может выражать 3 типа значений: строки, целые числа и числа с плавающей запятой.100.01 — это шестизначная строка.
Общие команды
имя команды | формат команды | описание команды |
---|---|---|
set | set key value | назначать |
get | get key | ценность |
getset | getset key value | принять значение и присвоить |
mset | MSET key1 value1 key2 value2 .. keyN valueN | установить несколькоkey Значением является их соответствующее значение. |
mget | MGET KEY1 KEY2 .. KEYN | Возвращает все (одно или несколько) значений для данного ключа |
EXPIRE | EXPIRE key seconds | Установить срок действия (в секундах) для ключа |
append | append key value | добавить значение в конец |
strlen | strlen key | получить длину строки |
setnx | setnx key value | использовать присваивание, когда значение не существует установить значение ключа NX PX 3000 атомарной операции, px устанавливает количество миллисекунд |
incr | incr key | Увеличение числа |
incrby | incrby key increment | Увеличить указанное целое число |
decr | decr key | Уменьшение числа |
decrby | decrby key decrement | Уменьшить указанное целое число |
Сценарии применения
-
1. Кэш объектов
-
2. Кэш с одним значением
-
3. incr используется для оптимистической блокировки incr: увеличение числа, которое можно использовать для реализации оптимистичной блокировки watch (транзакции)
-
4. Setnx используется для распределенных блокировок, когда значение не существует, используется присваивание, которое можно использовать для реализации распределенных блокировок.
-
5. Счетчик
-
6. Совместное использование сеансов веб-кластера
Примеры распространенных методов
dockerRedis:0>keys *
dockerRedis:0>append testName 2
"1"
dockerRedis:0>exists testName
"1"
dockerRedis:0>append testName " 1234"
"6"
dockerRedis:0>get testName
"2 1234"
dockerRedis:0>set testName1 "testName1"
"OK"
dockerRedis:0>get testName1
"testName1"
dockerRedis:0>getset testName2 "testName2"
null
dockerRedis:0>get testName2
"testName2"
dockerRedis:0>strlen testName
"6"
dockerRedis:0>set incrTest "10"
"OK"
dockerRedis:0>incr incrTest
"11"
dockerRedis:0>get incrTest
"11"
dockerRedis:0>decr incrTest
"10"
dockerRedis:0>decrby incrTest 5
"5"
dockerRedis:0>mset set01 1 set02 2 set03 3
"OK"
dockerRedis:0>mget set01 set02 set03
1) "1"
2) "2"
3) "3"
список тип списка
Тип списка может хранить упорядоченные повторяющиеся элементы. Чрезвычайно быстро получить записи рядом с головой или хвостом. Количество элементов списка до 2^32-1 (4 миллиарда)
Общие команды
имя команды | формат команды | описание команды |
---|---|---|
lpush | lpush key v1 v2 v3 ... | Вставить список слева |
lpop | lpop key | Возьмите его слева от списка |
rpush | rpush key v1 v2 v3 ... | Вставить список справа |
rpop | rpop key | Возьмите его с правой стороны списка |
lpushx | lpushx key value | Вставить значение в начало списка |
blpop | blpop key timeout | Вынуть из левой части списка, заблокировать, когда список пуст, можно установить максимальное время блокировки в секундах |
llen | llen key | Получить количество элементов в списке |
lrange | lrange key start end | Возвращает элементы указанного диапазона в списке, диапазон задан по началу и концу |
lset | lset key index value | Установите элемент в индексной позиции списка в значение value |
rpoplpush | rpoplpush key1 key2 | Вставьте справа от списка key1 и вставьте слева от списка key2 |
rpushx | rpushx key | Вставьте значение в конец списка значений |
brpop | blpop key | Выньте из правой части списка, заблокируйте, когда список пуст, вы можете установить максимальное время ожидания блокировки, единица измерения - секунды |
lindex | lindex key value | Получить элемент с индексом index в списке index начинается с 0 index |
ltrim | ltrim key start end | Обрежьте список, оставив только конец диапазона от начала до конца. |
brpoplpush | brpoplpush | Выталкивание из правой части списка key1 и вставка его в левую часть списка key2 заблокирует key1 key2 |
linsert | linsert key BEFORE/AFTER pivot value | Вставить значение в список до или после поворота значения |
Сценарии применения
-
1. Стек = LPUSH + LPOP
-
2. Очередь = LPUSH + RPOP
-
3. Блокирующий MQ (блокирующая очередь) = LPUSH + BRPOP
-
4. Список пользователей, список продуктов, список комментариев
Примеры распространенных методов
установить тип коллекции
Набор: неупорядоченные, уникальные элементы Максимальное количество элементов в наборе 2^32 - 1
Общие команды
имя команды | формат команды | описание команды |
---|---|---|
sadd | sadd key value1 value2 .... | Сохраните элемент в заданном ключе, игнорируйте элемент, если он существует, и создайте новый, если ключ не существует. |
srem | srem key value1 value2 .... | удалить элемент из ключа коллекции |
smembers | smembers key | Получить все элементы в коллекции |
spop | spop key count | Выберите количество элементов из заданного ключа, и элементы будут удалены из ключа |
srandmember | srandmember key count | Выбрать количество элементов из заданного ключа, элементы из ключа не удаляются |
scard | scard key | Получить количество элементов заданного ключа |
sismember | sismember key member | Определите, существует ли элемент-член в заданном ключе |
sinter | sinter key1 key2 key3 | Найдите пересечение нескольких множеств |
sdiff | sdiff key1 key2 key3 | Найдите разницу нескольких наборов |
sunion | sunion key1 key2 key3 | найти объединение нескольких множеств |
Сценарии применения
-
Лотерейный апплет WeChat
-
Weibo лайки, избранное, теги
-
Weibo и WeChat следуют модели
-
Скрининг продуктов электронной коммерции
Примеры распространенных методов
zset упорядоченный тип коллекции
SortedSet(ZSet) Сортированный набор: сами элементы неупорядочены и не повторяются Каждый элемент связан с оценкой (оценкой), которая может быть отсортирована по оценке, а оценки могут повторяться.
Общие команды
имя команды | формат команды | описание команды |
---|---|---|
zadd | zadd key score1 member1 score2 member2 ... | Добавить элемент оценки к отсортированному ключу набора |
zrem | zrem key mem1 mem2 .... | удалить элемент из отсортированного ключа набора |
zcard | zcard key | Получить количество элементов в отсортированном наборе |
zcount | zcount key min max | Возвращает количество элементов в коллекции, значение оценки которых находится в интервале [мин, макс] |
zincrby | zincrby key increment member | Добавить приращение к оценке члена элемента в отсортированном ключе набора |
zscore | zscore key member | Возвращает оценку члена элемента в отсортированном ключе набора |
zrank | zrank key member | Получить ранг участников в наборе (от малого к большому) |
zrange | zrange key start end | Получить элементы упорядоченного ключа набора от начального индекса до конечного индекса в положительном порядке |
zrevrank | zrevrank key member | Получить ранг участников в наборе (в порядке убывания баллов) |
zrevrange | zrevrange key start end | Получить элементы отсортированного ключа набора от начального индекса до конечного индекса в обратном порядке. |
Сценарии применения
- Нажмите на таблицу лидеров, таблицу лидеров продаж, следуйте таблице лидеров
Примеры распространенных методов
тип хеша
Хэш Redis — это таблица сопоставления полей и значений строкового типа, которая обеспечивает сопоставление полей и значений полей. Каждый хэш может хранить 2^32-1 пары ключ-значение (более 4 миллиардов).
-
преимущество
-
1. Однотипные данные классифицируются и объединяются для хранения, что удобно для управления данными
-
2. По сравнению со строковыми операциями потребляет меньше памяти и процессора.
-
3. По сравнению со строковым хранилищем экономит место
-
-
недостаток
-
1. Функцию истечения нельзя использовать на поле, только на ключе
-
2. Кластерная архитектура Redis не подходит для крупномасштабного использования.
-
Общие команды
имя команды | формат команды | описание команды |
---|---|---|
hset | hset key field value | Сохраняет значение ключа ключа хэш-таблицы |
hmset | hmset key field1 value1 field2 value2 | Сохранение нескольких пар ключ-значение в ключе хеш-таблицы |
hget | hget key field | Проверить, существует ли поле |
hmget | hmget key field1 field2 ... | получить значение поля |
hsetnx | hsetnx key field value | Сохраняет значение ключа несуществующего ключа хеш-таблицы. |
hexists | hexists key filed | Проверить, существует ли файл |
hgetall | hgetall key | Получить несколько значений поля |
hdel | hdel key field1 field2... | удалить указанное поле |
hincrby | hincrby key field increment | Указанное поле увеличивается само по себе |
hlen | hlen key | получить количество полей |
Сценарии применения
-
кеш объектов
-
работа с корзиной
Примеры распространенных методов
растровый тип растрового изображения
Битовая карта — это битовая операция для представления значения или состояния, соответствующего элементу, посредством бита, а ключ — это сам соответствующий элемент. Само растровое изображение значительно сэкономит место для хранения.
Общие команды
имя команды | формат команды | описание команды |
---|---|---|
setbit | setbit key offset value | Установите битовое значение ключа по смещению (может быть только 0 или 1). |
getbit | getbit key offset | Получить битовое значение ключа по смещению |
bitcount | bitcount key | Получить количество битов, ключ которых равен 1 |
bitpos | bitpos key value | Возвращает первое значение индекса, установленное на значение бита |
bitop | bitop and[or/xor/not] destkey key [key ...] | Выполнять логические операции с несколькими ключами и сохранять их в destkey |
Сценарии применения
- 1. Пользователь регистрируется каждый месяц, идентификатор пользователя является ключом, а дата является смещением. 1 означает регистрацию.
- 2. Подсчитайте активных пользователей, ключом является дата, идентификатор пользователя смещен: 1 означает, что он активен.
- 3. Запрос онлайн-статуса пользователя, дата — это ключ, а идентификатор пользователя — это смещение. 1 означает онлайн.
Примеры распространенных методов
тип геолокации
geo — это то, что Redis использует для обработки информации о местоположении. Официально используется в Redis3.2. Он в основном использует кривую Z-порядка, кодировку Base32 и алгоритм геохеширования.
Общие команды
имя команды | формат команды | описание команды |
---|---|---|
geoadd | ключ geoadd долгота широта имя участника 1 долгота 1 широта 1 имя участника 2 долгота 2 широта 2 ... | Добавить географические координаты |
geopos | имя участника ключа geopos 1 имя участника 2... | Возвращает широту и долготу участника |
geodist | ключевой элемент geodist 1 элемент 2 единица | Рассчитать расстояние между членами |
georadiusbymember | georadiusbymember ключевой член значение счетчик номер единицы asc[desc] | Найти ближайших участников по члену |
geohash | имя члена ключа geohash 1 имя члена 2... | Возвращает стандартную строку геохэша |
Сценарии применения
1. Запишите географическое положение 2. Рассчитать расстояние 3. Найдите «Людей поблизости»
Примеры распространенных методов
поток данных тип потока
Поток — это новая структура данных после Redis 5.0, которая используется для постоянной очереди сообщений.
Удовлетворено почти все содержимое очереди сообщений, в том числе:
- Генерация сериализации идентификатора сообщения
- обход сообщений
- Блокировка и неблокировка чтения сообщений
- Пакетное потребление сообщений
- Обработка ожидающих сообщений
- мониторинг очереди сообщений
Каждый поток имеет уникальное имя, которое является ключом Redis, который автоматически создается, когда сообщение добавляется с помощью команды xadd в первый раз.
Общие команды
Сценарии применения
Использование очередей сообщений