Redis для начинающих – основы и практика

Название системы Redis произошло от английского сокращения «remote dictionary server». Это резидентная СУБД с open source code (под лицензией BSD), которая представляет собой хранилище структур данных типа «ключ-значение» в памяти. Также ее используют в качестве кэша, data base и брокера сообщений.

Redis ― что это в роли кэширования?

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

  • кэш поддерживается в актуальном состоянии;
  • память используется эффективно;
  • повышается производительность приложения;
  • улучшается взаимодействие с пользователем.

Однако стоит упомянуть, что Redis cache не подходит для кэширования статических ресурсов для веб-сайтов (изображения, CSS, видеофайлы). Для этой цели в основном выбирают Memcached.

В кэшировании часто проводят сравнение Memcached vs Redis. Характеристики двух хранилищ схожи: оба принадлежат к подходу NoSQL, поддерживают все языки программирования, имеют открытый исходный код и хранят данные с ключом в ОЗУ. 

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

Redis в роли базы данных

В опросе StackOverflow 2020 года 20,5% разработчиков заявили, что используют именно Redis. С 2016 года он не теряет лидерскую позицию среди самых популярных баз данных. За это время было запущено более 2-х миллиардов контейнеров Redis Docker. 

Хранилище сочетает в себе скорость, отказоустойчивость, масштабируемость и гибкость. Поддержка в Redis разных data types (строки, списки, наборы, хэш-таблицы, битовые массивы, множества (в т.ч. сортированные), структуры HyperLogLog) удовлетворяет потребности практически всех приложений. Здесь данные обрабатываются мега-быстро, и при этом есть возможность масштабирования.

Распределение данных происходит при помощи Redis replication (дублирование) и sharding (сегментирование). Весомый плюс в копилку Redis ― поддержка большинства языков программирования. Уже хотите испробовать преимущества хранилища на практике? Тогда перейдем к Redis tutorial и рассмотрим установку Redis на Windows и Ubuntu.

Redis Windows

Данная инструкция дана для установки на Windows 10, но применима начиная с версии Windows 7. Для начала скачиваем файл Redis .msi (либо .zip) версия 3.0.504 на GitHub, открываем и выбираем папку для Redis install на Windows. Не забудьте поставить галочку в строке добавления в переменную окружения.

На каждом последующем шаге кликаем Next (если у вас нет особенных требований) и завершаем установку перезагрузкой компьютера. 

Для того чтобы проверить успешность Redis install на Windows, необходимо открыть командную строку и ввести rediscli.

При последующем запуске системы redis-server запускается в фоновом режиме автоматически. По умолчанию redis default port имеет значение 6379. Корректность установки проверяется посредством Redis cli command ping (в ответ сервер выдаст PONG).

Базами данных удобно управлять при помощи приложения Redis Desktop Manager (RDM). Оно также применяется в Linux и MacOS. В качестве Redis GUI обычно используют RDBTools.

Операционная система Ubuntu ― install Redis 

В Ubuntu установка Redis и настройка предполагает версию ОС 20.04 и выполнение действий от пользователя с правами sudo. Для начала обновите локальные базы пакетов и выполните команду sudo apt install redis server. Затем в конфигурационном файле (redis config) найдите директиву supervised и укажите для нее систему инициализации systemmd (изначально там указано значение no). Теперь сделайте перезапуск командой sudo systemctl restart redis.service. Запустите клиент redis-cli и введите в redis commands команду ping, чтобы проверить соединение. В ответ появится вывод PONG. Процесс Ubuntu install Redis можно считать завершенным. Чтобы запустить сервер, используется команда: sudo service redis_6379 start (для остановки stop). 6379 ― это redis port, прописанный по умолчанию (redis default port).

Redis в программных платформах

Использовать Redis можно на различных программных платформах и фреймворках. Также возможно развертывание Redis в Docker. Рассмотрим кратко tutorial на AWS, Laravel и Node.

AWS Redis

AWS предлагает использовать все возможности Redis при помощи совместимого с ним облачного хранилища Amazon Elasticache for Redis (где также поддерживается Redis Desktop Manager). Для этого необходимо зарегистрироваться, получить доступ и, пройдя обучение, создать Redis cluster. После этого можно приступать к использованию AWS Redis, пользуясь руководством. На сайте AWS в разделе Redis документация на русском представлена в развернутом виде.

Node Redis

У Node Redis есть два основных клиента: node_redis и ioredis. Оба предполагают доступ через Redis npm. Первый имеет более широкую поддержку модулей Redis. Качаем его из менеджера пакетов командой npm install redis. Теперь необходимо прописать код приложения (шаг 2 по инструкции). Для подключения к сторонним базам данных используют Connect Redis. Также есть возможность добавить Redis в приложение Rails (фреймворк на языке Ruby).

Laravel Redis

Для фанатов фреймворка Laravel Redis также открыт. Сначала установите пакет predis/predis через Composer. Можно также поставить Redis PHP расширение, что повысит производительность приложений, использующих хранилище.

Конфигурация для приложения находится в config file. Имя, хост и порт в файле конфигурации должны быть прописаны в каждом Redis server. В случае использования кластеров их нужно задать в настройках.

Также доступен целый ряд дополнительных параметров, которые добавляются в конфиг сервера. Для использования расширения Redis PHP параметр конфигурации client меняем на phpredis.

Основные команды хранилища

Напомним, что Redis DB ― это хранилище по типу ключ-значение. Новичкам важно иметь понимание о таких командах Redis как SET и GET. Redis SET предполагает установку ключей (Redis keys) и их значений. Командой GET получают значение, связанное с ключом. Команда GETSET устанавливает новое значение, возвращая текущее. Достаточно часто при этом можно встретить запрос в сети «redis get all keys». Чтобы получить все ключи из всех баз данных, есть два решения. Первое ― использовать в Redis KEYS (команда возвращает все ключи по шаблону, однако считается крайне медленной, поэтому практически не используется). Второе (предпочтительнее) ― опция –scan$ redis-cli –scan –pattern ‘*’. Именно таким способом решается задача Redis get all keys.

Доступные языки программирования

Еще одно преимущество Redis DB ― широкий выбор языков программирования, у которых есть библиотеки для работы с хранилищем: Python, Golang, C++, C#, Java, Javascript, PHP, Scala, Nim, Lua, Ruby и другими.

Python Redis

Использование Python Redis производится через клиентскую библиотеку для управления хранилищем NoSQL, которая называется redis-py. Сначала необходимо установить Redis сервер через pip и запустить его. Затем командой $ sudo pip install redis установить упомянутую библиотеку. Теперь доступны к использованию все команды Redis. При работе в Python также часто используется инструмент Python RQ (Redis Queue).

Golang Redis

Для того чтобы приступить к работе с Golang Redis, нужно также установить и запустить Redis. Теперь устанавливаем клиентскую библиотеку go-redis. После этого необходимо создать нового клиента командой client := redis.New Client(&redis.Options{

В go-redis есть множество параметров конфигурации (TLSConfig для подключения защищенное соединение TLS, установка максимального количества подключений и пр.)

Redis ― это мощный инструмент хранения данных, простой и удобный в использовании. Все данные хранятся в памяти, поэтому основное преимущество Redis в скорости (время отклика в миллисекундах). Благодаря структуризации он значительно облегчает написание кода, а open source позволяет расширять возможности хранилища под ваши потребности.

Отличительная особенность Redis ― хранение данных (в формате ключ-значение) в оперативной памяти, а не на жестком диске. Он поддерживает разные data типы и структуры. Система работает, сопоставляя ключи со значениями с помощью определенной модели. Благодаря открытому исходному коду и доступным функциям Redis настраивается под каждого пользователя.

Redis хранит данные в памяти сервера, поэтому размер базы данных ограничен доступной памятью. Однако здесь есть весомое преимущество: в отличие от других БД, которым нужно каждый раз обращаться к дисковому накопителю, подобное хранилище не тратит на это время. Система работает по принципу ключ-значение, и еще один плюс ― поддержка всех data types (строки, списки, хэш-таблицы, множества).

Redis используют в качестве кэширования, базы данных и брокера сообщений. У хранилища open source code, и каждый юзер настраивает его под свои потребности. Оно работает быстро, поэтому его часто используют для разных счетчиков (например, хранение количества просмотров страницы). Также распространено применение для PHP session store.

При работе с локальной установкой redis-server подключение происходит командой redis-cli, которая переводит в интерактивный режим с возможностью запускать встроенные команды. Подключение к удаленному хранилищу предполагает ту же команду, но с прописанными хостами и номерами портов через -h и -p. Соединение проверяется командой ping, на которую приходит ответ PONG.

О Redis нужно знать следующее: это резидентная СУБД класса NoSQL (под лицензией BSD), in-memory хранилище по принципу «ключ-значение». Обрабатывает данные с высокой скоростью, обладает широкими возможностями масштабирования и поддерживает разные data типы. Библиотеки для работы с Redis есть у всех высокоуровневых языков программирования. Ее можно разворачивать в Docker, а также на других программных платформах (Laravel, AWS, Node и пр.).

Redis ― резидентная система управления БД (REmote DIctionary Server). Ее используют для реализации кэша, как базу данных и как брокер сообщений. Redis нашел применение в разработке игр, аналитике в режиме реального времени, поддержке чатов, управлении сеансами, потоковой передачи мультимедиа.

Чтобы запустить Redis (в данном случае версия 3.2.1) на Windows 8.1 (или более ранних версиях) из командной строки, нужно проделать следующие шаги:

  • откройте командную строку (например, cmd.exe) и введите: >redis-server –service-start;
  • Redis API создаст Redis по умолчанию, который готов принимать соединения через порт 6379; 
  • теперь вы можете подключиться к нему с помощью файла redis-cli.exe.

Примечание. Чтобы сохранить и остановить БД, введите: >redis-server shutdown save. Чтобы выключить сервер, введите: >redis-server –service-stop.  

Да, Redis часто используется не только для кэширования, но и в качестве базы данных (in-memory). Кроме строк здесь хранят списки, множества, хэш-таблицы и другие data типы. Несмотря на функцию сбора в оперативной памяти (что дает высокую скорость), в него есть возможность сохранять данные на диск для надежности. Но в качестве главного хранилища Redis ― не очень удачный выбор.

Redis может обрабатывать более 100000 операций чтения и записи в секунду, поэтому считается, что его производительность очень высокая. Среди баз данных такого типа (ключ-значение) именно она ― самая быстрая. Но из-за того, что всё хранится в оперативной памяти, емкость БД ограничена ее физическим размером.

Да, Redis ― это нереляционная база данных, которая относится к классу NoSQL (No Structured Query Language ― не структурированный язык запросов). В отличие от SQL здесь не задаются определенные схемы, поддерживаются разные типы данных, а масштабируемость происходит горизонтально. Этому подходу присущи такие характеристики как высокая скорость, гибкость, простота и доступность. Часто NoSQL предполагает хранение по типу «ключ-значение». Все это есть у Redis.

Да, Redis считается быстрее баз данных SQL. В реляционных БД (SQL) для управления и обработки используется язык структурированных запросов. То есть перед работой у вас должны быть заданы определенные схемы, а данные должны иметь одинаковую структуру. В Redis (БД по типу NoSQL) поддерживаются разные data типы. Жесткой схемы здесь нет (у каждого документа своя структура), формат данных можно изменить в любой момент, масштабирование происходит по горизонтали. Это дает высокую гибкость и, соответственно, положительно влияет на скорость работы.

Обе СУБД принадлежат к NoSQL. MongoDB ― дисковая база данных, ориентированная на документы (JSON  подобные), оптимизированная для простоты эксплуатации (без схем). Redis ― это постоянное хранилище структур данных (по принципу «ключ-значение») в памяти. Благодаря тому, что здесь не нужно обращаться к дисковому пространству, обработка происходит быстрее, чем в MongoBD. Но в отдельных случаях использовать MongoBD разумнее. 

Redis относится к базам данных NoSQL. Жесткая структуризация здесь не нужна, как в СУБД SQL. Каждая частичка ― как отдельная единица. Изменение одного компонента не затрагивает структуру в целом. За счет этого отклик системы происходит быстрее. Также на производительность влияет метод масштабирования (в данном случае горизонтальный). Еще Redis считается быстрее SQL, потому что здесь обрабатываются только простые запросы. Сложные данные в большом количестве естественно обрабатываются дольше. Это как раз удел баз SQL. 

Redis работает по принципу «ключ-значение». Чтобы делать запросы в хранилище, используются две основные команды ― SET и GET. Первая устанавливает значение. Введя SET в командную строку, вы увидите подсказку, согласно которой нужно прописать сам ключ (key), значение (value) и время, по истечении которого данные будут удалены (EX seconds). Получить значение по ключу можно будет командой GET, а удалить ― командой DEL.

Часто использовать Redis вместо MongoBD более разумно. Например, когда нужно обрабатывать быстро меняющиеся данные. В этом случае Redis однозначно одержит победу по скорости. Но при этом надо понимать, что размер должен быть предсказуемым (чтобы данные поместились в оперативной памяти). Если важна более согласованная структура данных, предпочтительнее использовать MongoBD.  

error: Контент защищен.