Что такое Редис
Redis
даоткрытый источник,ОЗУсистема хранения структуры данных в , которую можно использовать какбаза данных,тайникиПО промежуточного слоя сообщений. Он поддерживает множество типов структур данных, таких какнитьstrings
,хэш hashes
,список lists
,собирать sets
,отсортированный набор sorted sets
С запросами диапазона, растровыми изображениями, гиперлоглогами и запросами радиуса геопространственного индекса.
Redis
Также имеет встроенную копию (replication
), LUA-скрипты (Lua scripting
), события привода LRU (LRU eviction
), транзакция (transactions
) и различные уровни сохраняемости диска (persistence
) и через Redis Sentinel (Sentinel
) и автоматическое разбиение (Cluster
) обеспечивает высокую доступность (high availability
).
Ну, это правильноredis
Введение на официальном китайском сайте лаконично и ясно.
Что такое NoSQL
мы знаемredis
это нереляционная база данныхNoSQL
. И почему появляетсяNoSQL
?NoSQL
Что это?
Эпоха автономных баз данных
Когда веб-сайт не очень посещаемый, мы можем использовать базу данных для обработки запросов трафика.
кэш + разделение
С увеличением трафика база данных больше не может удовлетворить наши потребности. Для повышения производительности мы добавляем уровень кэширования посередине и кластеризируем базу данных, оптимизируем структуру и разделяем чтение и запись.
А кеш вотNoSQL
, конечно, делать кэширование простоNoSQL
функцияRedis
Дело не только в кэшировании. Например, он также может достигатьпростая очередь сообщений,Решить совместное использование сеанса,прилавок,Таблица лидеров,Обращение с дружбойи т. д. функция, видимаяRedis
это очень мощный инструмент, давайте изучим его!
Общие команды Redis
Во-первых, давайте отложим в сторону типы данных и поговорим оRedis
общая команда.
Управление ключами и значениями
Redis
этоkey
value
Хранится кеш базы данных, все данные имеют свой уникальный ключ.
Для удобства демонстрации здесь я использую команду настройки, связанную со строкой
-
keys [pattern]
Получите все ключи, соответствующие требованиям. Временная сложностьO(n)
, как правило, не используется в производственной среде, посколькуRedis
даодин потокиз,Выполнение трудоемких задач блокирует другие задачи. обычно используютscan
Подстановка команд (неблокирующая).
-
dbsize
Получить текущее количество сохраненных данных. -
exists key
Определить, существует ли ключ -
del key
удалить указанные данные -
type key
Получить тип данных указанного ключа -
rename key newkey
Переименовать
Дата истечения срока годности
Redis
Многие данные используются каккешировать данные, и в качестве кеша он должен иметь срок действия.Redis
обеспечивает очень мощноеДата истечения срока годностиустановить функцию.
-
expire key seconds
Установите срок действия ключа. -
ttl key
Проверьте оставшееся время ключа, верните положительное число для представления оставшегося времени, -1 для постоянного, -2 для просроченного или несуществующего.
Пять основных типов данных Redis
Я много сказал вышеRedis
На основеRedis
структура данных. На протяженииRedis
Существует пять основных структур данных (некоторые расширенные структуры данных будут обсуждаться позже).нитьstrings
,хэш hashes
,список lists
,собирать sets
,отсортированный набор sorted sets
.
строка строка
на большинстве языков программированияString
Тип строки, для базы данныхRedis
также имеет важное значение.
-
set key value
Настройки -
get key
Получить значение ключа -
mset key1 value1 key2 value2
устанавливаются партиями иатомДа, можно использовать для сокращения потребления времени в сети -
mget key1 key2
Массовая выборка иатомДа, можно использовать для сокращения потребления времени в сети -
incr key
Автоматически увеличивать значение указанного ключа -
decr key
Уменьшить значение указанного ключа -
incrby key value
Автоматически увеличивать указанное значение -
decrby key value
Уменьшить указанное значение -
incrbyfloat key floatvalue
Увеличить указанное число с плавающей запятой Первые несколько операций могут быть использованы для достиженияприлавокфункция. -
setnx key value
Если ключ не существует, его можно успешно установить, иначе произойдет сбой.В сочетании с ограничением времени истечения это способ для Redis реализовать распределенные блокировки (упомянутые позже).. -
set key value xx
В отличие от предыдущего, если он существует, настройка выполняется успешно, в противном случае происходит сбой (эквивалентно операции обновления). -
getset key newvalue
установить новое значение и вернуть старое значение -
append key value
Добавление содержимого к исходному содержимому -
strlen key
получить длину строки -
getrange key start end
Получить содержимое указанного диапазона -
setrange key index value
Установить содержимое указанного диапазона -
setex key seconds value
Установите значение и установите время истечения срока действия -
set key value ex seconds nx
Установите значение для несуществующего ключа и установите срок действия,Реализация распределенных блокировок.
hash
На самом деле мы можем понятьhash
заМалый Редис,Redis
по базовой реализации иJava
серединаHashMap
почти, пользуйсямассив + связанный списокреализуется двухмерной структурой.
Разница в том, что вRedis
значение словаря вможет быть только строка, И ониrehash
по-другому, вRedis
используется впрогрессивная перефразировка.
Во время повторного хэширования старый и новый хэш-словари будут сохранены.Во время переноса данных содержимое старого словаря будет постепенно перенесено в новый словарь.Во время запроса два хеш-словаря будут запрашиваться одновременно, и только после завершения переноса данных новый словарь заменит старый словарь.
Давайте посмотрим наhash
основная операция.
-
hset key field value
Установить значение ключа в словаре -
hsetnx key field value
Установить значение ключа в словаре (который не существует) -
hmset key field1 value1 field2 value2 ...
Пакетные настройки -
hget key field
Получить значение ключа в словаре -
hmget key field1 field2
Массовое приобретение -
hgetall key
получить все -
hdel key field
удалить ключ -
hexists key field
определить, есть ли -
hlen key
Получить количество хранилищ в словаре, соответствующее указанному ключу -
hvals key
вернуть все значения -
hkeys key
вернуть все ключи -
hincrby key field increValue
Увеличить значение значения (также можно увеличить отрицательные числа) -
hincrbyfloat key field floatValue
Увеличить значение значения (с плавающей запятой)
list
Redis
Список в эквивалентенJava
серединаLinkedList
(Двусвязный список), то есть нижний слой пропускается черезсвязанный списокдобиться, поэтому дляlist
заОперации вставки и удаления выполняются быстро,ноПозиционирование индекса очень медленное.
Redis
предоставляет многоlist
операции, такие каквне,входитьи другие операции, вы можете в полной мере использовать их для реализациикучаилиочередь.
Давайте посмотрим наlist
основная операция.
-
lpush key item1 item2 item3...
стек слева -
rpush key item1 item2 item3...
стек справа -
lpop key
поп слева -
rpop key
поп справа -
lindex key index
Получить элемент по указанному индексу O(n) Использовать с осторожностью -
lrange key start end
Получить элементы указанного диапазона O(n) Использовать с осторожностью -
linsert key before|after item newitem
Добавить новый элемент до или после указанного элемента -
lrem key count value
Удаляет указанный элемент со значением value- count = 0 : удалить все элементы, значение которых равно значению
- count > 0 : удалить элементы count со значением слева направо
- count
-
ltrim key start end
сохранить указанный диапазон элементов -
lset key index newValue
обновить значение индекса -
blpop key timeout
Если нет, заблокируйте (тайм-аут указывает время блокировки как 0 для постоянного) -
brpop key timeout
Если нет, заблокируйте (тайм-аут указывает время блокировки как 0 для постоянного). Эти два могут использоваться для достиженияпотребительский производитель
Подводя итог, мы можем использоватьВлево и вправо или вправо и влево для реализации очереди, влево влево или вправо и вправо для реализации стека.
- lpush + lpop = Stack
- rpush + rpop = Stack**
- lpush + rpop = Queue
- rpush + lpop = Queue
- lpush/rpush + ltrim = ограниченный список (список фиксированной длины)
- lpush + brpop = очередь сообщений (очередь сообщений)
- rpush + blpop = очередь сообщений (очередь сообщений)
set
Redis
серединаset
эквивалентноJava
серединаHashSet
(неупорядоченное множество), где элементы внутринельзя повторить, мы можем использовать его для реализации некоторых функций дедупликации. У нас также есть несколько комплектовВозьмите перекресток,взять союзТакие операции могут получить общих друзей, общие увлечения и т.п. среди разных пользователей.
Давайте посмотрим наset
некоторые основные операции.
-
sadd key value
добавить элемент -
sdel key value
удалить элемент -
sismember key value
Определить, является ли это элементом коллекции -
srandmember key count
Случайным образом получить указанное количество элементов (не повлияет на структуру набора) -
spop key count
Случайное извлечение элементов из коллекции (нарушит структуру привязки) -
smembers key
Получить все элементы коллекции сложности O(n) -
scard key
Получить количество наборов -
sinter set1 set2 ...
Получить пересечение всех множеств -
sdiff set1 set2 ...
Получить разницу всех наборов -
sunion set1 set2 ...
Получить объединение всех наборов
zset
Redis
серединаzset
Являетсяотсортированный набор, с помощью которого вы можете получить множество интересных функций, таких как рейтинг успеваемости учащихся, рейтинг воспроизведения видео и так далее.
zset
в использованиипропустить столДля этого мы знаем, что можно использовать только непрерывное пространство, такое как массив.бинарный поискДля быстрого позиционирования связанный список невозможен. Таблица пропуска экономит много времени при поиске связанного списка (используйте метод пропуска для обхода индекса для упорядоченной вставки).
Давайте посмотрим наzset
некоторые основные операции.
-
zadd key score element
Добавьте, оценка используется для сортировки, значение должно быть уникальным, а временная сложность составляет O (logn) из-за используемой таблицы пропуска. -
zrem key element
Удаление элемента имеет временную сложность O(1) -
zscore key element
Получить оценку элемента -
zincrby key incrScore element
увеличить оценку элемента -
zrange key start end [withscores]
Получить элементы указанного диапазона индексов плюсwithscores
возвращает счетO(logn + m) временная сложность -
zrangebyscore key minScore maxScore [withscores]
Получить элементы указанного диапазона оценок плюсwithscores
затем возвращает счет,O(logn + m) временная сложность -
zcard key
получить отсортированную длину набора
Транзакции и конвейеры в Redis
Трубопровод
В некоторых случаях мыВозможно, потребуется выполнить несколько команд за одну операцию., и если мы будем просто выполнять одну команду за одной, это будет тратить много времени на потребление сети.Redis
Если он будет выполнен еще раз в середине, это сократит много накладных расходов.
Но следует отметить, чтоpipeline
Команды в конвейере не выполняются атомарно, то есть команды в конвейере поступаютRedis
Сервер может перемежаться с другими командами.
дела
Реляционные базы данных имеютACID
характеристика,Redis
Может гарантировать A (атомарность) и I (изоляцию), D (постоянство), чтобы увидеть, есть ли конфигурацияRDB
илиAOF
постоянная работа, но согласованность не может быть гарантирована, потому чтоRedis
Транзакция не поддерживает откат.
Мы можем просто понимать какRedis
сделки вPipeline
Есть дополнительная атомарная операция, то есть она не будет разделена другими командами, как показано на рисунке выше.
-
multi
знак начала бизнеса -
exec
выполнение транзакции -
discard
Очищает все команды, поставленные в очередь в этой транзакции, т. е. раскручивает всю транзакцию. -
watch key
Отслеживайте элемент перед началом транзакции.Если значение этого элемента будет изменено другими клиентами во время фиксации транзакции, транзакция завершится ошибкой. -
unwatch key
Не контролировать
Краткое изложение общих команд в Redis
Ну, это все для этой статьи, дляRedis
Как много вы забыли или не узнали?
Если статья была вам полезна, поставьте лайк (#^.^#)
оRedis
Статья будет написана в будущем, если вам интересно, вы можете подписаться на меня (#^.^#).