Понимание Redis и структур данных Redis

Redis
Понимание Redis и структур данных Redis

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

Краткое содержание статьи:

  1. Введение в Redis
  2. Сравнение Redis и других баз данных
  3. Сравнение Redis и других реализаций кеша
  4. Типы структур данных Redis
  5. Команды Redis работают с несколькими типами данных.
  6. Spring Data Redis работает с несколькими типами данных.
  7. ZSET (сортированный набор) гарантирует порядок
  8. SET (установить), чтобы получить элементы случайным образом

Введение в Redis

Redis — это нереляционная база данных (сокращенно nosql).

Redis — это удаленная база данных в памяти, и клиент Redis может запрашивать сервер по протоколу TCP.

Redis обладает высокой производительностью, поддерживает сохраняемость и репликацию и может легко хранить и считывать огромные объемы данных.

Итак, насколько быстр Redis?Redis поставляется с инструментом под названием redis-benchmark для имитации N клиентов, выполняющих M запросов одновременно.Вы можете использовать redis-benchmark -h для просмотра параметров.

Следующие тесты проверяют производительность 1 миллиона операций SET и GET:

$ redis-benchmark -n 1000000 -t set,get -P 16 –q
SET: 198098.27 requests per second
GET: 351988.72 requests per second

Сравнение Redis и других баз данных

Если он ограничен только одним местом, легко «видеть только деревья, но не лес» или «молоток в руке похож на гвоздь».

Поэтому мы сначала делаем горизонтальное сравнение с системами баз данных, обычно используемыми на рынке, чтобы вы могли более интуитивно почувствовать характеристики Redis.

Сравнение Redis и других реализаций кеша

В то же время Redis является широко используемой реализацией кэша, и мы также сравниваем преимущества и недостатки широко используемых реализаций кэша.

Типы данных Redis

Redis 5 приносит новыеТип данных потока, До этого Redis может хранить сопоставление между ключами и 5 различными типами структуры данных, этими 5 типами структуры данных являются STRING (строка), LIST (список), SET (набор), HASH (хэш) и ZSET (упорядоченный набор).

Обзор 5 типов данных в Redis

Нумерация тип структуры значение, хранящееся в структуре Структурная грамотность
1 STRING Строка, целое число, число с плавающей запятой Выполнять операции над целыми строками или частями строк; выполнять операции увеличения или уменьшения над целыми числами и числами с плавающей запятой.
2 LIST Связанный список, каждый узел в связанном списке содержит строку Push или push up или извлекать элементы (операция очереди) с обоих концов связанного списка; отделка); отделка) выполняется в зависимости от смещения; прочитайте одно или несколько элементов; найдите или удалить элементы в зависимости от значения
3 SET Неупорядоченная коллекция, содержащая строки и не повторяемая Добавить, получить и удалить один элемент; проверить, существует ли элемент в наборе; вычислить пересечение, объединение и разность; получить случайные элементы из набора
4 HASH Неупорядоченная хэш-таблица, содержащая пары ключ-значение Добавить, получить, удалить одну пару "ключ-значение", получить все ключи-значения
5 ZSET Упорядоченное сопоставление между элементами строки (элементами) и оценками с плавающей запятой (оценками), где порядок элементов определяется размером оценок. Добавление, получение, удаление отдельных элементов; получение элементов по диапазону или члену

Команды Redis работают с 5 типами данных

STRING команда

Манипуляции со строками

Для строк Redis поддерживает самые основныеSET GETиDELработать. Он также поддерживает множество сложных операций, которые кратко описаны ниже.

Нумерация Заказ описывать
1 SET key value Установить значение указанного ключа
2 GET key Получить значение указанного ключа
3 DEL key Удалите этот ключ и соответствующее ему значение, эта команда применима ко всем 5 типам данных.
4 GETRANGE key start end Возвращает подсимвол строкового значения в ключе
5 SETRANGE key offset value Перезаписывает строковое значение, хранящееся в данном ключе, параметром значения, начиная со смещения offset
6 STRLEN key Возвращает длину строки сохраненного значения ключа

Ниже приведена краткая демонстрация строки операции Command:

127.0.0.1:6379> GET key-string
(nil)
127.0.0.1:6379> SET key-str "my string value"
OK
127.0.0.1:6379> GET key-str
"my string value"
127.0.0.1:6379> DEL key-str
(integer) 1
127.0.0.1:6379> GET key-str
(nil)
127.0.0.1:6379>

SETEX и SETNX

SETEX и SETNX полезны при распределенных блокировках.

Нумерация Заказ описывать
1 SETEX key seconds value Свяжите значение значения с ключом и установите срок действия ключа в секундах (в секундах).
2 SETNX key value Только ключ настроек в клавише не существует

Пример приложения SETEX:

При реализации распределенного сеанса установите указанное время истечения срока действия при входе пользователя в систему. Всякий раз, когда пользователь запрашивает интерфейс, сбрасывайте время истечения срока действия. Если интерфейс не вызывается в течение указанного времени, распределенный сеанс недействителен.

цифровая манипуляция

Для чисел поддерживаются следующие операции:

Нумерация Заказ описывать
1 INCR key Ключ, сохраненный в цифровом значении
2 INCRBY key increment Добавляет значение, хранящееся в ключе, к заданному приращению (приращению)
3 INCRBYFLOAT key increment Добавляет значение, хранящееся в ключе, к заданному приращению с плавающей запятой (приращение)
4 DECR key Уменьшает числовое значение, хранящееся в ключе, на единицу
5 DECRBY key decrement Значение, хранящееся в ключе, за вычетом данного декремента

Вот простая демонстрация команды:

127.0.0.1:6379> SET key-num 0
OK
127.0.0.1:6379> INCR key-num
(integer) 1
127.0.0.1:6379> GET key-num
"1"
127.0.0.1:6379> INCR key-num
(integer) 2
127.0.0.1:6379> GET key-num
"2"
127.0.0.1:6379> INCR key-num
(integer) 3
127.0.0.1:6379> GET key-num
"3"
127.0.0.1:6379> INCRBY key-num 100
(integer) 103
127.0.0.1:6379> GET key-num
"103"
127.0.0.1:6379> INCRBY key-num 100
(integer) 203
127.0.0.1:6379> DECR key-num
(integer) 202
127.0.0.1:6379> DECRBY key-num 100
(integer) 102
127.0.0.1:6379> DECRBY key-num 100
(integer) 2
127.0.0.1:6379> DECRBY key-num 100
(integer) -98

Массовая операция

Нумерация Заказ описывать
1 MGET key1 [key2..] Получить все (одно или несколько) значений для данного ключа
2 MSET key value [key value ...] Установите одну или несколько пар ключ-значение одновременно
3 MSETNX key value [key value ...] Одновременно установить одну или несколько пар ключ-значение тогда и только тогда, когда ни один из заданных ключей не существует
127.0.0.1:6379> MSET a 1 b 2 c 3
OK
127.0.0.1:6379> MGET a b c
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> MSETNX a 1 b 2 c 3
(integer) 0
127.0.0.1:6379> MSETNX a 1 b 2 d 4
(integer) 0
127.0.0.1:6379> MSETNX d 4 e 5
(integer) 1
127.0.0.1:6379>

БИТ-операция

Нумерация Заказ описывать
1 GETBIT key offset Для строкового значения, хранящегося в ключе, получить бит по указанному смещению
2 SETBIT key offset value Устанавливает или очищает бит по указанному смещению для строкового значения, хранящегося в ключе
3 BITCOUNT key [start] [end] Подсчитать количество заданных цифр в строке
4 BITOP operation destkey key [key ...] Выполняет побитовую операцию над несколькими ключами (содержащими строковые значения) и сохраняет результат в целевом ключе.

СПИСОК команд

Одна из уникальных особенностей Redis заключается в том, что он поддерживает структуру связанного списка.Ниже приведены команды операций для структуры связанного списка.Знание этих команд очень важно для вас, чтобы освоить структуру связанного списка Redis.

Нумерация Заказ описывать
1 BLPOP key1 [key2 ] timeout Удалите и получите первый элемент списка, если в списке нет элементов, список будет заблокирован до тех пор, пока не истечет время ожидания или не будет найден элемент для извлечения.
2 BRPOP key1 [key2 ] timeout Выходите и получите последний элемент списка, если у списка нет элементов, заблокируют список до тех пор, пока не найдет время ожидания или пока не найден элемент pop.
3 BRPOPLPUSH source destination timeout Извлекает значение из списка, вставляет извлеченный элемент в другой список и возвращает его; если в списке нет элементов, блокирует список до тех пор, пока не истечет время ожидания или не будет найден элемент для извлечения.
4 LINDEX key index Получить элемент в списке по индексу
5 LINSERT key BEFORE AFTER pivot value
6 LLEN key получить длину списка
7 LPOP key Выйти и получить первый элемент списка
8 LPUSH key value1 [value2] Вставить одно или несколько значений в начало списка
9 LPUSHX key value Вставить значение в заголовок существующего списка
10 LRANGE key start stop Получить список элементов в указанном диапазоне
11 LREM key count value удалить элемент списка
12 LSET key index value Установить значение элемента списка по индексу
13 LTRIM key start stop Обрезать список, то есть оставить в списке только элементы из указанного диапазона, а элементы, не входящие в указанный диапазон, будут удалены.
14 RPOP key За исключением последнего элемента списка, возвращаемым значением является удаленный элемент.
15 RPOPLPUSH source destination Удалите последний элемент списка и добавьте этот элемент в другой список и верните
16 RPUSH key value1 [value2] Добавить одно или несколько значений в список
17 RPUSHX key value Добавить значения в существующий список
127.0.0.1:6379> LPUSH list1 1
(integer) 1
127.0.0.1:6379> RPOP list1
"1"
127.0.0.1:6379> RPOP list1
(nil)
127.0.0.1:6379> BRPOP list1 10
(nil)
(10.10s)
127.0.0.1:6379>
127.0.0.1:6379> LPUSH list1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LSET list1 4 50
OK
127.0.0.1:6379> LSET list1 5 50
(error) ERR index out of range

вBLPOP BRPOP BRPOPLPUSHЯвляется блокирующим, обычно используется в очередях сообщений.

SET команда

Набор Redis — это неупорядоченная коллекция типа String. Члены коллекции уникальны, что означает, что повторяющиеся данные не могут появляться в коллекции.

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

Redis ограничивает каждый ключ хранением только 512M данных, а максимальное количество элементов в коллекции составляет 232-1 (4294967295, каждая коллекция может хранить более 4 миллиардов элементов).

Нумерация Заказ описывать
1 SADD key member1 [member2] Добавить одного или нескольких участников в коллекцию
2 SCARD key Получить количество членов коллекции
3 SDIFF key1 [key2] Возвращает разницу всех заданных наборов
4 SDIFFSTORE destination key1 [key2] Возвращает разницу всех заданных и сохраненных наборов в месте назначения.
5 SINTER key1 [key2] Возвращает пересечение всех наборов, указанных
6 SINTERSTORE destination key1 [key2] Возвращает пересечение всех наборов, заданных и сохраненных в месте назначения.
7 SISMEMBER key member Определите, является ли элемент-член членом заданного ключа
8 SMEMBERS key Возвращает все элементы в коллекции
9 SMOVE source destination member Переместите элемент-член из исходной коллекции в целевую коллекцию.
10 SPOP key Удалить и вернуть случайный элемент из коллекции
11 SRANDMEMBER key [count] Возвращает одно или несколько случайных чисел в коллекции
12 SREM key member1 [member2] Удалить набор одного или нескольких членов
13 SUNION key1 [key2] Вернуться на все данные коллекции
14 SUNIONSTORE destination key1 [key2] Объединение всех заданных коллекций хранится в целевой коллекции.
15 SSCAN key cursor [MATCH pattern] [COUNT count] перебирать элементы в коллекции
127.0.0.1:6379> SADD set1 a b c d e
(integer) 5
127.0.0.1:6379> SCARD set
(integer) 0
127.0.0.1:6379> SCARD set1
(integer) 5
127.0.0.1:6379> SISMEMBER set1 f
(integer) 0
127.0.0.1:6379> SISMEMBER set1 e
(integer) 1
127.0.0.1:6379> SMEMBERS set1
1) "d"
2) "c"
3) "a"
4) "b"
5) "e"
127.0.0.1:6379> SPOP set1
"d"
127.0.0.1:6379> SPOP set1
"a"
127.0.0.1:6379> SMOVE set1 set2 b
(integer) 1
127.0.0.1:6379> SMOVE set1 set2 c
(integer) 1
127.0.0.1:6379> SMEMBERS set2
1) "b"
2) "c"

SPOPИз-за своей случайности его можно использовать в качестве основы для бизнес-сценариев, таких как лотерейные программы.

ХЭШ-команда

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

Нумерация Заказ описывать
1 HDEL key field1 [field2] Удалить одно или несколько полей хеш-таблицы
2 HEXISTS key field Проверить, существует ли указанное поле в ключе хэш-таблицы
3 HGET key field Получить значение указанного поля, хранящегося в хеш-таблице
4 HGETALL key Получить все поля и значения для указанного ключа в хеш-таблице
5 HINCRBY key field increment Добавить шаг приращения к целочисленному значению указанного поля в ключе хеш-таблицы
6 HINCRBYFLOAT key field increment Добавить инкрементное приращение для значения с плавающей запятой указанного поля в ключе хэш-таблицы
7 HKEYS key Получить все поля в хеш-таблице
8 HLEN key Получить количество полей в хеш-таблице
9 HMGET key field1 [field2] Получить значение всех заданных полей
10 HMSET key field1 value1 [field2 value2 ] Одновременно установить несколько пар поле-значение (поле-значение) в ключ хеш-таблицы
11 HSET key field value Установите значение поля field в ключе хеш-таблицы на значение
12 HSETNX key field value Только когда поле поля отсутствует, установите значение поля хеш-таблицы.
13 HVALS key Получить все значения в хеш-таблице
14 HSCAN key cursor [MATCH pattern] [COUNT count] Перебор пар ключ-значение в хеш-таблице.
127.0.0.1:6379> HSET User001 name "Tom"
(integer) 1
127.0.0.1:6379> HSET User001 birthday "1990-01-20"
(integer) 1
127.0.0.1:6379> HSET User001 gender "Man"
(integer) 1
127.0.0.1:6379> HKEYS User001
1) "name"
2) "birthday"
3) "gender"
127.0.0.1:6379> HGETALL User001
1) "name"
2) "Tom"
3) "birthday"
4) "1990-01-20"
5) "gender"
6) "Man"

ZSET-команда

Отсортированные наборы, как и хэши, используются для хранения пар ключ-значение. Ключи отсортированного набора называются элементами, и каждый элемент отличается; значения отсортированного набора называются оценкой, и оценка должна быть числом с плавающей запятой.

Нумерация Заказ описывать
1 ZADD key score1 member1 [score2 member2] Добавление в упорядоченный набор одного или нескольких участников или обновить существующий член балла
2 ZCARD key Получить количество членов отсортированного набора
3 ZCOUNT key min max подсчитывает количество элементов с указанным значением интервала в отсортированном наборе
4 ZINCRBY key increment member Добавить приращение к оценке указанного члена в отсортированном наборе
5 ZINTERSTORE destination numkeys key [key ...] Вычисляет пересечение заданного отсортированного набора или наборов и сохраняет результирующий набор в новом ключе отсортированного набора.
6 ZLEXCOUNT key min max Вычислить количество элементов в указанном интервале словаря в отсортированном наборе
7 ZRANGE key start stop [WITHSCORES] Возвращает упорядоченный набор элементов в указанном диапазоне путем индексации диапазона
8 ZRANGEBYLEX key min max [LIMIT offset count] Возвращает член упорядоченного набора по диапазону словаря
9 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] Возвращает элементы в указанном интервале отсортированного набора по дробям
10 ZRANK key member Возвращает индекс указанного члена в отсортированной коллекции
11 ZREM key member [member ...] удаляет один или несколько элементов из отсортированного набора
12 ZREMRANGEBYLEX key min max удаляет все члены заданного диапазона словаря в отсортированном наборе
13 ZREMRANGEBYRANK key start stop удаляет все члены заданного рангового интервала из отсортированного набора
14 ZREMRANGEBYSCORE key min max удаляет все члены заданного дробного интервала из отсортированного набора
15 ZREVRANGE key start stop [WITHSCORES] Возврат заказанный набор участников в указанный диапазон, через индекс, баллы от высокого в конце
16 ZREVRANGEBYSCORE key max min [WITHSCORES] Возвращает элементы в указанном интервале оценки в отсортированном наборе с оценками, отсортированными от большего к меньшему.
17 ZREVRANK key member Возвращает ранг указанного члена в отсортированном наборе, отсортированном по убыванию значения оценки (от большего к меньшему).
18 ZSCORE key member Возвращает дробное значение члена в упорядоченном наборе
19 ZUNIONSTORE destination numkeys key [key ...] Вычисляет объединение заданного одного или нескольких отсортированных наборов и сохраняет в новом ключе
20 ZSCAN key cursor [MATCH pattern] [COUNT count] Перебирает элементы в отсортированном наборе (включая элементы элементов и оценки элементов)
127.0.0.1:6379> ZADD Users 1 zhangsan 2 lisi 3 wangwu 4 maliu
(integer) 4
127.0.0.1:6379> ZCARD Users
(integer) 4
127.0.0.1:6379> ZRANK Users maliu
(integer) 3
127.0.0.1:6379> ZSCAN Users 0
1) "0"
2) 1) "zhangsan"
   2) "1"
   3) "lisi"
   4) "2"
   5) "wangwu"
   6) "3"
   7) "maliu"
   8) "4"
127.0.0.1:6379>

Суммировать

RedisDataType

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

Сегодня я просто покажу вамГрафик знаний RedisВерхушка айсберга, мы надеемся, что совместными усилиями мы продолжим улучшать нашукарта навыков, давайте построим нашСистема знаний, Улыбнись, любя этот алгоритм и интеллект эпохи.

Ссылки по теме

Ресурсы для авторов

Справочные ресурсы