Обзор системы управления базами данных Redis
Redis — популярная СУБД с открытым исходным кодом. По состоянию на 2021 – 2022 гг. входит в десятку наиболее востребованных баз данных по версии портала DB-Engines. Поддерживается работа со множеством операционных систем: macOS, Linux, BSD, есть возможность простого запуска на Windows, хотя официально эта ОС не поддерживается.
Это нереляционная NoSQL СУБД, в которой отсутствует сегментация пользователей или групп, нет полнофункционального контроля доступа: используется базовый зашифрованный пароль, отключение и переименование команд. Из-за особенностей работы она не может полностью соответствовать принципу ACID и поэтому не подойдет для проектов, в которых на первом месте стоит отказоустойчивость.
Технические особенности и принцип работы
Самое важное отличие от привычных СУБД — это способ хранения данных: они хранятся в оперативной памяти. Такой подход позволяет обеспечивать максимальную скорость доступа к информации, недостижимую в обычных СУБД, использующих для этого твердотельные накопители или жесткие диски.
Помимо этого, для обеспечения высокой скорости доступа используются упрощенная модель «ключ-значение», в которой ключ выполняет роль уникального идентификатора — с его помощью происходит доступ к работе с данными. Оба этих фактора — ОЗУ в качестве хранилища и модель «key-value» — делают Redis одной из самых быстрых СУБД.
Скорость — это превосходно, но что с надежностью? Надежность — это не менее важный показатель, когда речь заходит об обработке данных. Поскольку обеспечить надежность хранения данных в оперативной памяти очень сложно, то разработчики решили не изобретать велосипед и задействовать знакомые инструменты:
- Снимки — система с определенной периодичностью делает снимок и сохраняет его на энергонезависимых твердотельных накопителях. Это позволяет сохранить данные при отказе ОЗУ или откатить их к моменту снимка, если потребуется.
- Упреждающее журналирование — метод, при котором информация о всех действиях записывается в журнал до того, как они будут применены. Если случится какой-то сбой, то на основе этих записей можно будет установить прерванные операции и сделать повтор или отмену.
Дополнительным средством обеспечения безопасности и повышения производительности выступает репликация. В Redis доступна репликация по схеме «master/slave» — главный сервер может дублировать данные на ведомые сервера, но при этом нет механизмов для автоматического переключения и выбора в качестве «master» одного из ведомых серверов, если главный выйдет из строя. Этот недостаток можно устранить, если задействовать выделенную систему управления узлами Redis Sentinel.
В конце апреля этого года, после нескольких выпусков Release candidate, была опубликована Redis 7.0. В ней появилось множество улучшений и новшеств. Главные из них:
- теперь поддерживаются функции, выполняемые на стороне сервера;
- по умолчанию у клиентов теперь нет доступа к функционалу, оказывающему влияние на безопасность;
- добавлено большое количество новых команд;
- представлена вторая редакция ACL;
- устранены известные уязвимости.
Система непрерывно развивается и улучшается, показывая стабильный рост качества и возможностей. Несмотря на то, что первый выпуск был не так давно, в 2009 г., за это время она смогла проделать серьезный путь и стать одной из самых востребованных баз данных.
Где можно использовать
В основном, это различные операции в реальном времени, когда ценность данных во многом определяется скоростью их обработки. В целом, Redis способна обеспечить достаточную безопасность хранения данных при максимальной скорости обработки. Но, несомненно, для проектов, где требуется высокая надежность, лучше выбрать привычные варианты: MySQL, PostgreSQL или приведенный ниже вариант с прослойкой.
Прослойка
Одним из довольно популярных вариантов, где может пригодиться Redis, является блэкбенд между привычной СУБД — Oracle, PostgreSQL или MySQL — и конечными потребителями. Реляционные СУБД не такие быстрые, но зато обеспечивают высокий уровень надежности, а для повышения производительности к ним обычно подключают Memcached или Redis.
Получается, что основные данные хранятся в «классической» реляционной базе, а та их часть, качество работы с которой зависит от скорости, выносится в Redis. Эта схема практически безупречна, и позволяет удовлетворить любые потребности, если не брать в расчет определенную сложность реализации и дороговизну.
Кеширование
В качестве примера можно привести web-портал, который обрел популярность и начал стремительно расти. Допустим, что его специфика требует использовать большое количество изображений, как пользовательских, так и собственных. Из-за такого количества картинок страницы начинают медленно прогружаться, пользователи недовольны, начинается их отток.
Кеш-прослойка на основе Redis позволит устранить эту проблему и заодно повысить производительность web-портала, перенеся часть нагрузки рабочей СУБД в Redis. Совсем недавно лидером в отрасли подобных решений был Memcached, но в последнее время почти повсеместно стала использоваться Redis — это связано с тем, что она удобнее и функциональнее: есть поддержка Lua и другие преимущества.
Машинное обучение
Метод машинного обучения основан на обработке огромного количества информации, в частности — обучение на примерах. Для этого необходимы большие потоки различных данных, которые требуются для обучения путем «скармливания» интеллектуальной системе множества примеров, актуальных для того или иного правила. Использование привычных СУБД не позволяет добиться высокой скорости работы с данными, которая напрямую влияет на успех.
Кроме этого, обученная система должна работать в режиме реального времени, например, обрабатывать финансовые операции и моментально блокировать те, что выходят за паттерн обычного поведения пользователя, оставляя окончательное право на принятие решения человеку-оператору. В схожих кейсах скорость обработки имеет решающее значение, поэтому Redis, использующая RAM в качестве хранилища данных, подходит как нельзя лучше.
Общение, посетители интернет-ресурсов и рейтинги
Быстродействие и эффективные инструменты — это то, что нужно для моментальной обработки поступающей информации. К примеру, для удобной сортировки уникальных элементов отлично подходит Redis Sorted Set — структура данных, использование которой позволяет в реальном времени определять лидеров состязания. Этой возможностью активно пользуются разработчики приложений, в которых присутствует соревновательный элемент и рейтинги победителей.
Общение в чатах и на форумах, живая лента и новости — это все примеры, где Redis показывает себя с лучшей стороны. Хранение http сессий: профилей и их настроек, учетных данных с возможностью присвоить каждой сессии уникальное значение для последующего анализа.
В целом, это все простые и банальные примеры, взятые из рекомендаций. Реальный же опыт использования может быть гораздо глубже и зависит только от фантазии разработчика. Сама система написана на С, но поддерживает такие языки, как Go, Lua, Perl, PHP, Nim, Python и множество других.
Подведение итогов
Redis — современное хранилище данных, способное решить множество задач, завязанных как на скорость, так и на надежность. Основное отличие от привычных баз данных — место хранения данных: вместо SSD или HDD используется оперативная память — за счет этого достигается высокая скорость работы.
Безопасность представлена предварительным журналированием и периодическими снимками системы, которые записываются в специальный файл, расположенный на твердотельном накопителе. Репликация позволяет распределять данные по подчиненным серверам, повышая таким образом отказоустойчивость и производительность. Предусмотрено автоматическое переназначение master-сервера, если с действующим что-то случится.
Особенности структуры дают возможность применять Redis в качестве БД, системы кеширования или посредника сообщений. Поддерживается множество типов данных и команд: объединение, сортировка и так далее.
К СУБД есть подробная документация, позволяющая найти ответы на большинство вопросов, возникающих при работе. Помимо этого, у Redis большое и активное сообщество и множество форумов, в том числе и русскоязычных — это может быть преимуществом для начинающих программистов, которым сложно разобраться без квалифицированной помощи.