В качестве общего руководства по Redis эта статья призвана дать каждому концептуальное и целостное понимание Redis и быстро приступить к работе, заложив основу для углубленного изучения Redis.
Краткое содержание статьи:
- Введение в Redis
- Сравнение Redis и других баз данных
- Сравнение Redis и других реализаций кеша
- Типы структур данных Redis
- Команды Redis работают с несколькими типами данных.
- Spring Data Redis работает с несколькими типами данных.
- ZSET (сортированный набор) гарантирует порядок
- 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>
Суммировать
В этой статье мы встречаемся на Redis, и позволим всем через горизонтальный способ контрастировать с общем пониманием функций и функциональных возможностей, а затем мы, в свою очередь, ввели пять основных структур данных Redis, а также его операционную команду. В качестве вводного руководства Redis эта статья направлена на то, чтобы у всех было концептуальное и целостное понимание рады, чтобы заложить основу для дальнейшего Redis.
Сегодня я просто покажу вамГрафик знаний RedisВерхушка айсберга, мы надеемся, что совместными усилиями мы продолжим улучшать нашукарта навыков, давайте построим нашСистема знаний, Улыбнись, любя этот алгоритм и интеллект эпохи.