База данных Redis. Возможно, вы уже слышали о такой базе данных и у вас может возникнуть вполне логичный вопрос: "а нужно ли мне использовать эту базу данных? Зачем она нужна, когда у меня есть, допустим, традиционные базы данных такие как mysql, postgress, mongo db или какие-то другие базы данных.

В чем же здесь отличие и какие преимущества дает использование базы данных Redis? Давайте разберемся в этих вопросах в этом видео. 

Отличие redis от других баз данных

Первое, с чего нужно начать, кардинальное отличие базы данных redis от других баз данных - это то, что redis хранит те данные, которые вы будете в нее добавлять, она хранит в оперативной памяти.В отличие от тех же традиционных баз данных, которые мы с вами перечисляли, которые хранят данные которые вы в них будете добавлять на жестком диске. 

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

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

Чтобы понять порядок насколько быстрее redis работает с данными, мы можем посмотреть сравнительную информацию.

Если мы говорим об оперативной памяти, то здесь идет счет о гигабайтов секунду (в зависимости от той модели оперативной памяти, с которой вы будете работать).

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

Если же мы говорим о чтении записи на твердотельный жесткий диск (SSD-диск), мы говорим о десятках мегабайт в секунду. Разница там чуть ли не в тысячу раз. 

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

Разница в сотни, десятки сотен раз. 

Главный недостаток

Хотя мы имеем такое уникальное преимущество в скорости при использовании данных redis, здесь же, исходя из этого, из-за того что данные хранятся в оперативной памяти, мы получаем с вами первый недостаток: то, что данные в оперативной памяти очень легко потерять. Например, отключили свет, все данные у вас потерялись, произошел сбой в электричестве данные потерялись. Произошел программный сбой, тоже данные могут потеряться.

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

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

Соответственно, исходя из этой особенности, база данных redis рекомендуется сохранять наименее ответственные данные, либо данные которые имеют какой-то определенный срок жизни, потерять которые не столь критично для работы.

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

Redis как хранилище "ключ-значение"

Следующий момент, который мы должны понимать, что redis - хранилище ключ значение. 

Выглядит это следующим образом. У вас есть некий набор ключей и у этих ключей есть определенные значения. Таким образом значение может быть не только строкой, значение может быть различным типами данных. Можно хранить достаточно сложные типа данных и в последних версиях redis мы можем даже хранить json объект, то есть документы. 

Это не просто у нас уже стал не просто хранилищем. А уже документы ориентированные базы данных принципе ее тоже можно таким же образом использовать как документ ориентированную базу данных.

Но, первоначальная задача redis - это, конечно, ключ - значение.

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

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

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

Как мы это делали в реляционных баз данных. Мы не можем строить такие большие сложные системы. У нас просто хранилище ключ - значение. 

Уже программным способом каким-то образом выделить нужные нам объем данных, но, пожалуй, следующее такое основное преимущество, которое позволяет нам использовать именно базу данных редис - это то, что мы можем устанавливать время жизни ключа.

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

Мы можем хранить какие-то временные данные. Если же мы храним данные в каких-то других источниках других базах данных то нам придется писать какую-то программную логику для удаления ненужных данных с течением времени. Каким-то образом создавать крон задание повторяющееся, которое будет у нас удалять данные. Здесь же все значительно проще: добавили ключ и сказали сколько он будет жить, далее уже сама база данных позаботится о том, чтобы удалить этот ключ. 

Таким образом вы обеспечите себе не захламление этой базы данных и она сама будет очищаться. У вас и будет занимать мало места в оперативной памяти. 

Давайте подведем итог.

Где же использовать redis?

1) там где нужно высокая скорость работы с данными считать, записать. Там, где это нужно сделать быстро. Это хорошее решение.

2) там, где вам нужно удалять какие-то данные с течением времени.

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

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

Игровая индустрия: В играх часто требуется хранить позиции множества игровых объектов (например, машинок) и обновлять их позиции в реальном времени. Redis отлично подходит для таких сценариев, так как позволяет быстро обновлять и получать данные о позициях, что особенно важно при большом количестве игроков, чтобы обеспечить высокую скорость получения данных. После окончания игры данные могут быть автоматически удалены, и нет необходимости беспокоиться о чистке старых данных.

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

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

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

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

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