Что такое Redis: как работает и где используется?

Что такое Redis Изучение

Что такое Redis

Redis ( RE сучок DI ctionary S ервере) является передовым NoSQL ключ-значением хранилища данных используются в качестве базы данных, кэша, и брокера сообщений. Redis известен своими быстрыми операциями чтения и записи, богатыми типами данных и расширенной структурой памяти. Он идеально подходит для разработки высокопроизводительных масштабируемых веб-приложений.

Redis — одна из самых популярных баз данных типа «ключ-значение», занимающая 4-е место по удовлетворенности пользователей базами данных NoSQL. Популярность Redis продолжает расти, и многие компании ищут разработчиков Redis на такие должности, как администратор базы данных и другие.

Что такое Redis?

Redis — это хранилище структур данных в памяти с открытым исходным кодом, используемое в качестве базы данных, кеша и брокера сообщений. Redis был создан Сальваторе Санфилиппо в 2006 году и написан на C.

Это расширенное хранилище данных типа «ключ-значение» в NoSQL, которое часто называют сервером структуры данных, поскольку его ключи содержат строки, хэши, списки, наборы, отсортированные наборы, точечные рисунки и гиперлоги. Операции чтения и записи Redis выполняются очень быстро, потому что данные хранятся в памяти. Данные также могут быть сохранены на диске или записаны обратно в память.

Поскольку Redis хранит свои данные в памяти, он чаще всего используется в качестве кеша. Некоторые крупные организации, использующие Redis, — это Twitter, GitHub, Instagram, Pinterest и Snapchat.

Преимущества Redis

  • Скорость: Redis очень быстр. Он может выполнять 110 000 операций SET в секунду и 81 000 операций GET в секунду.
  • Поддерживает расширенные типы данных: Redis поддерживает большинство типов данных, таких как список, набор, отсортированный набор и хэши. Это дает вам большую гибкость
  • Операции являются атомарными: это гарантирует, что если два клиента обращаются к данным одновременно, сервер Redis получит обновленное значение.
  • Универсальное использование: Redis можно использовать для кэширования, очередей обмена сообщениями и краткосрочных данных, таких как сеансы веб-приложений.
  • Легко настроить: Redis легко настроить

Как установить Redis

Согласно официальной документации, рекомендуемый способ установки Redis — скомпилировать его из исходников. Сначала загрузите его с официального сайта, а затем скомпилируйте, выполнив следующие действия:

wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make

Затем вы можете протестировать свою сборку, набрав make test. srcКаталог будет заполнен исполняемым Redis.

Рекомендуется скопировать сервер Redis и интерфейс командной строки в нужные места, используя одну из двух стратегий.

  1. sudo make install
  2. Вручную с помощью следующих команд:
sudo cp src/redis-server /usr/local/bin/

sudo cp src/redis-cli /usr/local/bin/

Оттуда запустите сервер Redis, выполнив redis-serverдвоичный файл (без аргументов). Поскольку нет явных файлов конфигурации, все параметры используют внутреннее значение по умолчанию. Это лучший способ начать, если вы новичок в Redis и хотите изучить среду.

Чтобы использовать Redis из вашего приложения, загрузите и установите клиентскую библиотеку Redis на основе языка программирования, который вы хотите использовать.

Типы данных Redis

Redis — это хранилище ключей и значений, но оно поддерживает многие типы структур данных в виде значений, отличных от строк. Ключ в Redis — это безопасная для двоичного кода строка с максимальным размером 512 МБ.

Давайте обсудим типы данных, которые поддерживаются в значениях.

String

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

redis 127.0.0.1:6379SET name "educative" 
OK 
redis 127.0.0.1:6379GET name 
"educative"

В этом примере SETи GETпредставлены команды Redis, о которых мы поговорим позже. name- это ключ, а educativeэто строковое значение, которое мы храним.

List

В Redis списки — это списки строк, которые отсортированы по порядку вставки, поэтому элементы хранятся в связном списке. Вы можете добавлять элементы как на голове, так и на хвосте. Если нам нужно вставить элемент в список из 500 записей, это займет столько же времени, сколько и добавление элемента в список из 50 000 записей.

Читайте также:  Pygame: видеоигры

Вот несколько примеров операций для составления списка результирующих списков:

LPUSH mylist x   # now the list is "x"
LPUSH mylist y   # now the list is "y","x"
RPUSH mylist z   # now the list is "y","x","z" (RPUSH was used this time)

Sets

Наборы в Redis — это неупорядоченные коллекции строк. Этот тип значения аналогичен списку, но наборы не допускают дублирования, и элементы не сортируются ни в каком порядке. Вы можете добавлять или удалять участников вО (1)О ( 1 ) временная сложность.

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

Сортированные наборы

Мы можем сортировать элементы с типом значения Sorted Set. Каждый элемент будет связан с числом, которое мы называем счетом. Это определяет порядок.

Например, если у нас есть вызванный ключ vegetables, и мы хотим сохранить carrotи celeryв качестве значения. Оценка от carrot10 celeryдо 15. Первым будет морковь, затем сельдерей.

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

Хеш

В Redis тип хеш-значения — это пара значений поля. Они используются для представления объектов, но могут хранить множество элементов и полезны также для других задач. Хеш занимает очень мало места, поэтому вы можете хранить миллионы объектов в небольшом экземпляре хеша.

Фактически, хеш может хранить до {2} ^ {32}2Взаимодействие с другими людьми3 2Взаимодействие с другими людьмиВзаимодействие с другими людьми- 1- 1 пары поле-значение, что составляет более 4 миллиардов.

Допустим, мы хотим хранить информацию об оценках студентов. Тема может быть ключевым. Значение может быть парой «поле-значение», где поле представляет собой имя учащегося, а значение — оценку каждого учащегося.

Вот еще один пример, чтобы познакомить вас с хешем Redis.

HMSET user:1000 username antirez password P1pp0 age 34
HGETALL user:1000
HSET user:1000 password 12345
HGETALL user:1000

Команды Redis

Команды Redis используются для выполнения операций. Есть разные команды, которые мы можем применять к нашим различным типам данных. Ниже мы рассмотрим по одной команде для каждого типа данных, о котором говорилось выше, но имейте в виду, что в Redis существует множество команд.

Хранение строк в Redis

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

SET команда

Мы можем сохранить запись в Redis с помощью SETкоманды. Это установит ключ для хранения строкового значения. Если ключ уже содержит значение, оно будет перезаписано. Он имеет следующий синтаксис:

SET keyValue

GET команда

Команда GETдает нам значение ключа. Если ключ не существует, он вернется nil. GETобрабатывает только строковые значения. Синтаксис:

GET key

Хранение списков в Redis

Мы также можем хранить списки, и база данных Redis хранит их в виде связанного списка. Когда мы вставляем новый элемент, мы можем вставить его либо в голову (крайний левый элемент), либо в хвост (крайний правый элемент). Мы рассмотрим две команды, используемые для добавления и удаления записей из головы при использовании списков.

LPUSH команда

Команда LPUSHиспользуется для вставки значения в начало списка. Мы можем использовать одно или несколько значений, а синтаксис следующий:

LPUSH key value

Примечание. Элементы вставляются в обратном порядке, потому что каждый элемент выбирается и вставляется в начале.

LPOP команда

Команда LPOP используется для удаления элемента из списка в начале (или слева).

LPOP key

Хранение наборов в Redis

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

SADD команда

Это позволяет нам добавлять указанные члены в набор, хранящийся под ключом. Если ключ не существует, создается новый набор.

SADD key value

Хранение отсортированных наборов в Redis

Элементы в наборе Redis не хранятся в каком-либо порядке. Итак, если мы хотим хранить элементы в отсортированном порядке, мы можем использовать отсортированные наборы, также называемые ZSets.

Читайте также:  5 самых сложных вопросов по программированию из недавних собеседований FAANG

Перед вставкой каждому элементу должна быть присвоена оценка. База данных Redis сортирует элементы в порядке возрастания оценок. Посмотрим на команду добавления элементов в отсортированный набор.

ZADD команда

Эта команда добавит элементы в отсортированный набор в базе данных Redis. Мы можем указать несколько пар очков или членов. Если член уже находится в этом отсортированном наборе, оценка обновляется, и элемент повторно вставляется в правильную позицию для сохранения оценки. Вот синтаксис:

ZADD key score value

Хранение хэша в Redis

В Redis значение также может быть парой «поле-значение», которую мы называем хэш-структурой данных. Давайте посмотрим на команду для хранения хэша в Redis.

HMSET команда

Эта команда используется для хранения хэша в Redis. Он установит для полей соответствующие значения в хэше. Эта команда перезаписывает поля, которые уже существуют в хэше. Синтаксис этой команды:

HMSET key field value

При использовании Redis 4.0.0 HMSETсчитается устаревшим и HSETпредпочтительным.

Расширенные концепции Redis

Теперь, когда мы понимаем некоторые основы Redis и познакомились с командами, давайте рассмотрим некоторые дополнительные концепции.

Важное примечание о Redis

Для этого урока, вместо терминологии модель / Slave, мы будем использовать прогрессивную leader/ followerметафору. Использование нами этой терминологии не помешает вашему пониманию Redis.

Официальная документация Redis использует модель Master / Slave, которая преобладала в компьютерных науках на протяжении десятилетий, начиная с 1904 года.

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

В Educative мы верим в расширение возможностей разработчиков и изменение отрасли к лучшему. Использование инклюзивной терминологии является частью этого культурного сдвига.

Репликация данных в Redis

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

Redis следует подходу лидера / подчиненного для репликации данных на сервере. Один из серверов — это a leader, а остальные — это серверы followers, которые все подключены к leader. Мы записываем все в каталог leader, который затем отправляет изменения в followers.

Если a followerотключен, он автоматически переподключится и leaderточно воспроизведет. Это можно сделать двумя способами:

  • Частичная синхронизация.
  • Полная синхронизация.

Примечание. В Redis процесс репликации асинхронный. Эти followerсервера асинхронно признают данные из leader, так что leaderзнает, какие команды были обработаны.

Упорство

Поскольку Redis — это база данных в памяти, данные хранятся в памяти (или ОЗУ). Если сервер выходит из строя, все сохраненные данные теряются. Redis имеет механизмы резервного копирования данных на диске. Таким образом, данные загружаются с диска в память при перезагрузке сервера. Redis имеет два варианта сохранения:

  • Сохранение RDB (моментальные снимки): моментальные снимки данных хранятся на диске в dump.rdbфайле. Долговечность зависит от того, как часто данные выгружаются на диск.
  • Сохранение файла только с добавлением (AOF): каждая операция записи, полученная сервером, регистрируется в файле, поэтому все команды в файле AOF запускаются снова при перезагрузке.

Кеширование на стороне клиента

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

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

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

Что учить дальше

Теперь вы должны хорошо понимать, как работает Redis и что он может сделать для ваших приложений. Это мощный инструмент, популярность которого растет. Любой разработчик должен обладать солидными навыками Redis в своем арсенале инструментов. Но есть еще чему поучиться.

Далее вам следует изучить:

  • Разбиение в Redis
  • Расширенные команды
  • Безопасность в Redis
  • Кластеры в Redis
Оцените статью
bestprogrammer.ru
Добавить комментарий