Структура данных самого подробного туториала по Redis во всей сети

Redis задняя часть

Структура данных серии Redis

Серия Redis

Принцип кэширования и дизайн серии Redis

Быстрый старт серии Redis

Структура данных серии Redis

Типы данных Redis и сценарии приложений

Redis — это система хранения ключей и значений, написанная на языке ANSI C. Тип ключа — строка. Тип данных значения 8 типов данных

  • Общие типы данных

    • строка тип строки

    • список тип списка

    • установить тип коллекции

    • sortedset(zset) тип отсортированного множества

    • тип хеша

  • Необычные типы данных

    • растровый тип растрового изображения

    • тип геолокации

    • тип потока

  • Уведомление

    Команды в Redis нечувствительны к регистру (установить SET), а ключи нечувствительны к регистру (имя ИМЯ).

image.png

строка тип строки

Строка 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 миллиардов).

image.png

  • преимущество

    • 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 в первый раз.

Общие команды

Сценарии применения

Использование очередей сообщений

Примеры распространенных методов