Redis: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м Ссылки: пометка статей без источников, нормализация служебных разделов, косметические правки.
м Ссылки: исключение пометок об отсутствии изображений из статей с изображениями в карточке и автопроверкой их наличия
 
(не показаны 33 промежуточные версии 21 участника)
Строка 1: Строка 1:
{{Карточка программы
{{Карточка программы
| лицензия = RSAL v2 или SSPL v1
| name = Redis
| logo =
| screenshot =
| caption =
| author =
| developer = Сальваторе Санфилиппо
| status = активный
| frequently updated = да
| operating system = [[Кроссплатформенное программное обеспечение|Кроссплатформенный]]
| language = англ.
| genre = [[NoSQL]]-СУБД <br/>(«[[ключ — значение]]»)
}}
}}
'''Redis''' ({{lang-en|'''re'''mote '''di'''ctionary '''s'''erver}}) — сетевое журналируемое хранилище данных типа «[[ключ — значение]]» с открытым исходным кодом. Нереляционная высокопроизводительная [[СУБД]].


'''Redis''' (от {{lang-en|remote dictionary server}}) — [[резидентная система управления базами данных]] класса [[NoSQL]], работающая со структурами данных типа «[[ключ — значение]]». Используется как для [[База данных|баз данных]], так и для реализации [[кэш]]ей, [[брокер сообщений|брокеров сообщений]]. Изначально выпускалась под [[Свободное программное обеспечение|свободной лицензией]], с 2024 года — под лицензией {{iw|SSPL|||Server Side Public License}}<ref>{{Cite web|url=https://redis.com/blog/redis-adopts-dual-source-available-licensing/|title=Redis Adopts Dual Source-Available Licensing|lang=en|first=Rowan|last=Trollope|website=Redis|date=2024-03-20|access-date=2024-03-22}}</ref><ref>{{Cite web|url=https://github.com/redis/redis/blob/unstable/LICENSE.txt|title=redis/LICENSE.txt at unstable · redis/redis|lang=en|website=GitHub|access-date=2024-03-22}}</ref><ref>{{Cite web|url=https://www.opennet.ru/opennews/art.shtml?num=60820|title=СУБД Redis переходит на проприетарную лицензию. Обсуждение удаления Redis из Fedora|website=www.opennet.ru|access-date=2024-03-24}}</ref>
== Дизайн ==
Хранит базу данных в оперативной памяти, снабжена механизмами снимков и журналирования для обеспечения постоянного хранения (на диске). Также предоставляет операции для реализации механизма обмена сообщениями в паттерне [[Издатель-подписчик (шаблон проектирования)|издатель-подписчик]]. С его помощью приложения могут создавать каналы, подписываться на них и помещать в каналы сообщения, которые будут получены всеми подписчиками (как [[IRC]]-чат). Поддерживает репликацию данных с основных узлов на несколько подчинённых ({{lang-en|master — slave replication}}). Также Redis поддерживает [[транзакция (информатика)|транзакции]] и [[пакетная обработка|пакетную обработку]] команд (выполнение пакета команд, получение пакета результатов).


Ориентирована на достижение максимальной производительности на [[Атомарная операция|атомарных]] операциях (заявляется о приблизительно 100 тыс. SET- и [[HTTP GET|GET]]-запросов в секунду на [[Linux]]-сервере начального уровня<ref>{{Cite web |url=http://redis.io/topics/benchmarks |title=How fast is Redis? |access-date=2016-07-10 |archive-date=2016-07-08 |archive-url=https://web.archive.org/web/20160708233512/http://redis.io/topics/benchmarks |deadlink=no }}</ref>). Написана на [[Си (язык программирования)|Си]], интерфейсы доступа созданы для большинства основных языков программирования.
Redis работает на большинстве [[POSIX]]-систем, таких как [[Linux]], [[BSD/OS|*BSD]], [[Mac OS X]] без каких-либо дополнений. Linux и Mac OS X — две операционные системы, в которых был разработан и в большей степени протестирован Redis, поэтому VMware рекомендует использовать именно их для развёртывания. Официальной поддержки для сборок [[Windows]] нет, но доступны некоторые опции, позволяющие обеспечить работу Redis на этой системе<ref>[http://redis.io/topics/introduction Introduction to Redis]</ref>. Компания [[Microsoft]] активно работает над переносом Redis на Windows.


По состоянию на 15 июля 2011 года разработка Redis спонсировалась компанией [[VMware]]<ref>[http://antirez.com/post/vmware-the-new-redis-home.html VMware: the new Redis home]</ref>. Начиная с мая 2013 года она спонсируется Pivotal Software<ref>[http://redis.io/topics/sponsors Redis Sponsors]</ref>.
В период 2010—2013 годов разработка системы спонсировалась компанией [[VMware]]<ref>{{Cite web |url=http://antirez.com/post/vmware-the-new-redis-home.html |title=VMware: the new Redis home |access-date=2010-12-30 |archive-date=2010-03-22 |archive-url=https://web.archive.org/web/20100322191235/http://antirez.com/post/vmware-the-new-redis-home.html |deadlink=no }}</ref>, с мая 2013 года, после реорганизаций в федерации [[EMC]] — VMware, проект передан в Pivotal<ref>{{Cite web |url=http://redis.io/topics/sponsors |title=Redis Sponsors |access-date=2015-04-02 |archive-date=2014-06-25 |archive-url=https://web.archive.org/web/20140625052000/http://redis.io/topics/sponsors |deadlink=no }}</ref>. С июня 2015 года основной спонсор проекта — компания {{iw|Redis Labs}}, специально основанная для коммерциализации Redis, в неё же перешёл основной разработчик продукта — [[Санфилиппо, Сальваторе|Сальваторе Санфилиппо]].

== Дизайн ==
Хранит базу данных в оперативной памяти, снабжена механизмами снимков и журналирования для обеспечения постоянного хранения (на дисках, твердотельных накопителях). Также предоставляет операции для реализации механизма обмена сообщениями в шаблоне «[[издатель подписчик]]»: с его помощью приложения могут создавать каналы, подписываться на них и помещать в каналы сообщения, которые будут получены всеми подписчиками (как [[IRC]]-чат). Поддерживает [[Репликация (вычислительная техника)|репликацию]] данных с основных узлов на несколько подчинённых ({{lang-en|master — slave replication}}). Также поддерживает [[транзакция (информатика)|транзакции]] и [[пакетная обработка|пакетную обработку]] команд (выполнение пакета команд, получение пакета результатов).

Работает на большинстве [[POSIX]]-систем, таких как [[Linux]], [[BSD/OS|*BSD]], [[Mac OS X]] без каких-либо дополнений, компания-спонсор проекта поддерживает систему на Linux и Mac OS X. Официальной поддержки для сборок [[Windows]] нет, но доступны некоторые опции, позволяющие обеспечить работу Redis на этой системе<ref>{{Cite web |url=http://redis.io/topics/introduction |title=Introduction to Redis |access-date=2012-05-15 |archive-date=2012-05-07 |archive-url=https://web.archive.org/web/20120507202956/http://redis.io/topics/introduction |deadlink=no }}</ref>, сообщается о работах [[Microsoft]] по переносу Redis на Windows.


В версии 2.6.0 добавлена поддержка [[Lua]], позволяющего выполнять запросы на сервере. Lua позволяет атомарно совершить произвольную обработку данных на сервере и предназначена для использования в случае, когда нельзя достичь того же результата с использованием стандартных команд.
В версии 2.6.0 добавлена поддержка [[Lua]], позволяющего выполнять запросы на сервере. Lua позволяет атомарно совершить произвольную обработку данных на сервере и предназначена для использования в случае, когда нельзя достичь того же результата с использованием стандартных команд.


Среди языков программирования, имеющих библиотеки для работы с Redis, — [[Си (язык программирования)|Си]], [[C++]], [[C Sharp|C#]], [[Clojure]], [[Лисп]], [[Erlang]], [[Java]], [[JavaScript]], [[Haskell]], [[Lua]], [[Perl]], [[PHP]], [[Python]], [[Ruby]], [[Scala (язык программирования)|Scala]], [[Go (язык программирования)|Go]], [[Tcl]], [[Rust (язык программирования)|Rust]], [[Swift (язык программирования)|Swift]], [[Nim]].
== Поддерживаемые языки программирования ==
Множество языков программирования имеют библиотеки для работы с Redis: [[Си (язык программирования)|C]], [[C++]], [[C Sharp|C#]], [[Clojure]], [[Lisp]], [[Erlang]], [[Java]], [[JavaScript]], [[Haskell]], [[Lua]], [[Perl]], [[PHP]], [[Python]], [[Ruby]], [[Scala (язык программирования)|Scala]], [[Go (язык программирования)|Go]], [[Tcl]], [[Rust (язык программирования)|Rust]], [[Swift (язык программирования)|Swift]].


== Модели данных ==
== Модели данных ==
Все данные Redis хранит в виде [[Ассоциативный массив|словаря]], в котором ключи связаны со своими значениями. Одно из ключевых отличий Redis от других хранилищ данных заключается в том, что значения этих ключей не ограничиваются строками. Поддерживаются следующие абстрактные типы данных:
Все данные Redis хранит в виде [[Ассоциативный массив|словаря]], в котором ключи связаны со своими значениями. Одно из ключевых отличий Redis от других хранилищ данных заключается в том, что значения этих ключей не ограничиваются строками. Поддерживаются следующие абстрактные типы данных: строки, [[Список (информатика)|списки]], [[Множество (тип данных)|множества]], [[Хеш-таблица|хеш-таблицы]], упорядоченные множества.
* Строки
* [[Список (информатика)|Списки]]
* [[Множество (тип данных)|Множества]]
* [[Хеш-таблица|Хеш-таблицы]]
* Упорядоченные множества


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


== Восстановление данных ==
== Восстановление данных и репликация ==
Восстановление данных проводится двумя разными способами. Первый — это механизм снимков, в котором данные асинхронно переносятся из оперативной памяти в файл формата *RDB (расширение [[дамп]]ов Redis). Второй способ (с версии 1.1) — файл, доступный только для дозаписи, в котором хранится [[Файл регистрации|лог]] всех операций, изменявших данные в памяти.
[[Восстановление данных]] проводится двумя разными способами. Первый — это механизм снимков, в котором данные асинхронно переносятся из оперативной памяти в файл формата <tt>RDB</tt> (расширение дампов Redis). Второй способ (с версии 1.1) — [[журнал упреждающей записи]], доступный только для дозаписи, в котором хранятся все операции, изменявшие данные в памяти.


Система поддерживает репликацию с [[Ведущий ведомый|ведущих узлов на ведомые]]. Данные с любого сервера Redis могут реплицироваться произвольное количество раз. Все данные, которые попадают на один узел Redis (ведущий, {{lang-en|master}}), будут попадать также на другие узлы (ведомые, {{lang-en|slave}}). Для конфигурирования ведомых узлов можно изменить опцию <tt>slaveof</tt> или аналогичную по написанию команду (узлы, запущенные без подобных опций, являются ведущими узлами).
== Репликация ==
Redis поддерживает репликацию типа master-slave. Данные с любого сервера Redis могут реплицироваться произвольное количество раз.
Репликация полезна для масштабирования чтения (но не записи) или при очень больших объёмах данных. Все данные, которые попадают на один узел Redis (который называется master), будут попадать также на другие узлы (называются slave). Для конфигурирования slave-узлов можно изменить опцию slaveof или аналогичную по написанию команду (узлы, запущенные без подобных опций, являются master-узлами).


Репликация помогает защитить данные, копируя их на другие сервера. Репликация также может быть использована для увеличения производительности, так как запросы на чтение могут обслуживаться slave-узлами. Эти узлы могут ответить слегка устаревшими данными, но для большинства приложений это приемлемо.
Репликация помогает защитить данные, копируя их на другие серверы. Репликация также может быть использована для увеличения производительности, так как запросы на чтение могут обслуживаться ведомыми узлами ([[Горизонтальная масштабируемость|горизонтальное масштабирование]] по чтению, но не по записи). Узлы-реплики могут ответить слегка устаревшими данными, но для многих приложений это приемлемо.


Система репликации Redis ещё не поддерживает автоматическую отказоустойчивость. Если master-узел выходит из строя, необходимо вручную выбрать новый master из списка slave-узлов. Необходимо использовать Redis Sentinel для мониторинга и автоматического переключения master-узлов, если необходима устойчивая к сбоям система.
Система репликации Redis сама по себе не поддерживает автоматическую отказоустойчивость: если ведущий узел выходит из строя, необходимо вручную выбрать нового ведущего среди ведомых узлов; но имеется система Redis Sentinel, обеспечивающая мониторинг и автоматическое переключение.


== Redis Sentinel ==
== Redis Sentinel ==
'''Redis Sentinel'''<ref>{{Cite web|url = http://redis.io/topics/sentinel|title = Redis Sentinel Documentation|author = |work = |date = |publisher = }}</ref> — это система, разработанная для помощи в управлении узлами Redis. Она выполняет следующие задачи:
'''''Redis Sentinel''''' — специализированная система управления узлами Redis, выполняющая следующие задачи:
* ''<u>Мониторинг:</u>'' Sentinel постоянно проверяет, что master- и slave- узлы работают так, как ожидается;
* мониторинг: постоянно проверяется, что ведущий и ведомые узлы работают так, как ожидается;
* ''<u>Уведомление:</u>'' Sentinel может уведомить системного администратора или другую программу о том, что с отслеживаемыми узлами что-то не так;
* уведомление: сообщает системному администратору или другой программе о том, что с отслеживаемыми узлами что-то не так;
* <u>''Автоматическое переключение:''</u> Если master-узел не работает так, как ожидается, Sentinel может начать процесс восстановления работоспособности, в котором slave-узел объявляется как master-, другие slave-узлы меняют конфигурацию на использование нового master-узла и приложение информируется об использовании нового адреса master-узла;
* автоматическое переключение: если ведущий узел не работает так, как ожидается, Sentinel может начать процесс восстановления работоспособности, в котором один из ведомых узлов объявляется как ведущий, другие ведомые узлы меняют конфигурацию на использование нового ведущего и приложение информируется об использовании нового адреса ведущего узла;
* <u>''Поставщик конфигурации:''</u> Sentinel сообщает клиентам и другим Redis-узлам адрес текущего master-узла. В случае отказа, Sentinel сообщает новый адрес.
* поставщик конфигурации: сообщение клиентам и другим Redis-узлам адреса текущего ведущего узла, в случае отказа Sentinel сообщает новый адрес.
Redis Sentinel входит в состав Redis начиная с версии 2.6 (Sentinel 1 — устарел). Начиная с версии Redis 2.8 поставляется текущая версия — Sentinel 2.
Redis Sentinel входит в состав Redis начиная с версии 2.6 (Sentinel 1 — устарел). Начиная с версии Redis 2.8 поставляется текущая версия — Sentinel 2.


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

== Производительность ==
Высокая производительность Redis обуславливается тем, что все данные хранятся в оперативной памяти. На Linux-сервере начального уровня был установлен результат в 110 000 запросов SET и 81 000 запросов GET в секунду<ref>[http://redis.io/topics/benchmarks How fast is Redis?]</ref>.


== Примечания ==
== Примечания ==
Строка 64: Строка 46:


== Ссылки ==
== Ссылки ==
* {{official|redis.io}}
* [http://redis.io/ Официальный сайт]
* {{github|antirez|redis}}
* [http://redis.io/clients Список существующих клиентов для Redis]
* [https://github.com/antirez/redis Redis на Github]
* [https://github.com/kondratovich/the-little-redis-book Маленькая книга о Redis на русском]
* [http://eax.me/redis/ Записки программиста]
* [http://habrahabr.ru/post/204354/ Redis на habrahabr]


{{Нет иллюстрации}}
{{СУБД}}
{{СУБД}}



Текущая версия от 14:07, 29 мая 2024

Redis
Логотип программы Redis
Тип База данных «ключ-значение»
Разработчик Сальваторе Санфилиппо[вд]
Написана на Си[2]
Операционная система кроссплатформенность
Языки интерфейса английский
Первый выпуск 8 мая 2009
Последняя версия
Репозиторий github.com/redis/redis
Лицензия RSAL v2 или SSPL v1
Сайт redis.io (англ.)
Логотип Викисклада Медиафайлы на Викискладе

Redis (от англ. remote dictionary server) — резидентная система управления базами данных класса NoSQL, работающая со структурами данных типа «ключ — значение». Используется как для баз данных, так и для реализации кэшей, брокеров сообщений. Изначально выпускалась под свободной лицензией, с 2024 года — под лицензией SSPL[англ.][3][4][5]

Ориентирована на достижение максимальной производительности на атомарных операциях (заявляется о приблизительно 100 тыс. SET- и GET-запросов в секунду на Linux-сервере начального уровня[6]). Написана на Си, интерфейсы доступа созданы для большинства основных языков программирования.

В период 2010—2013 годов разработка системы спонсировалась компанией VMware[7], с мая 2013 года, после реорганизаций в федерации EMC — VMware, проект передан в Pivotal[8]. С июня 2015 года основной спонсор проекта — компания Redis Labs[англ.], специально основанная для коммерциализации Redis, в неё же перешёл основной разработчик продукта — Сальваторе Санфилиппо.

Хранит базу данных в оперативной памяти, снабжена механизмами снимков и журналирования для обеспечения постоянного хранения (на дисках, твердотельных накопителях). Также предоставляет операции для реализации механизма обмена сообщениями в шаблоне «издатель — подписчик»: с его помощью приложения могут создавать каналы, подписываться на них и помещать в каналы сообщения, которые будут получены всеми подписчиками (как IRC-чат). Поддерживает репликацию данных с основных узлов на несколько подчинённых (англ. master — slave replication). Также поддерживает транзакции и пакетную обработку команд (выполнение пакета команд, получение пакета результатов).

Работает на большинстве POSIX-систем, таких как Linux, *BSD, Mac OS X без каких-либо дополнений, компания-спонсор проекта поддерживает систему на Linux и Mac OS X. Официальной поддержки для сборок Windows нет, но доступны некоторые опции, позволяющие обеспечить работу Redis на этой системе[9], сообщается о работах Microsoft по переносу Redis на Windows.

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

Среди языков программирования, имеющих библиотеки для работы с Redis, — Си, C++, C#, Clojure, Лисп, Erlang, Java, JavaScript, Haskell, Lua, Perl, PHP, Python, Ruby, Scala, Go, Tcl, Rust, Swift, Nim.

Модели данных

[править | править код]

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

Тип данных значения определяет, какие операции (команды) доступны для него; поддерживаются такие высокоуровневые операции, как объединение и разность наборов, сортировка наборов.

Восстановление данных и репликация

[править | править код]

Восстановление данных проводится двумя разными способами. Первый — это механизм снимков, в котором данные асинхронно переносятся из оперативной памяти в файл формата RDB (расширение дампов Redis). Второй способ (с версии 1.1) — журнал упреждающей записи, доступный только для дозаписи, в котором хранятся все операции, изменявшие данные в памяти.

Система поддерживает репликацию с ведущих узлов на ведомые. Данные с любого сервера Redis могут реплицироваться произвольное количество раз. Все данные, которые попадают на один узел Redis (ведущий, англ. master), будут попадать также на другие узлы (ведомые, англ. slave). Для конфигурирования ведомых узлов можно изменить опцию slaveof или аналогичную по написанию команду (узлы, запущенные без подобных опций, являются ведущими узлами).

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

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

Redis Sentinel — специализированная система управления узлами Redis, выполняющая следующие задачи:

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

Redis Sentinel входит в состав Redis начиная с версии 2.6 (Sentinel 1 — устарел). Начиная с версии Redis 2.8 поставляется текущая версия — Sentinel 2.

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

Примечания

[править | править код]
  1. Release 7.4.1 — 2024.
  2. The redis Open Source Project on Open Hub: Languages Page — 2006.
  3. Trollope, Rowan Redis Adopts Dual Source-Available Licensing (англ.). Redis (20 марта 2024). Дата обращения: 22 марта 2024.
  4. redis/LICENSE.txt at unstable · redis/redis (англ.). GitHub. Дата обращения: 22 марта 2024.
  5. СУБД Redis переходит на проприетарную лицензию. Обсуждение удаления Redis из Fedora. www.opennet.ru. Дата обращения: 24 марта 2024.
  6. How fast is Redis? Дата обращения: 10 июля 2016. Архивировано 8 июля 2016 года.
  7. VMware: the new Redis home. Дата обращения: 30 декабря 2010. Архивировано 22 марта 2010 года.
  8. Redis Sponsors. Дата обращения: 2 апреля 2015. Архивировано 25 июня 2014 года.
  9. Introduction to Redis. Дата обращения: 15 мая 2012. Архивировано 7 мая 2012 года.