Redis: различия между версиями
[отпатрулированная версия] | [непроверенная версия] |
Строка 66: | Строка 66: | ||
* {{official|redis.io}} |
* {{official|redis.io}} |
||
* {{github|antirez|redis}} |
* {{github|antirez|redis}} |
||
*Книга рецептов Redis 4.x [http://onreader.mdl.ru/Redis4xCookbook/content/index.html], Пеньчень Хуань, Зуофей Вань, Packt Publishing Ltd., Февраль 2018, ISBN 978-1-78398-816-7, перевод отдельных глав |
|||
{{Нет иллюстрации}} |
{{Нет иллюстрации}} |
Версия от 13:07, 27 ноября 2018
Redis | |
---|---|
Тип |
NoSQL-СУБД («ключ — значение») |
Разработчик | Сальваторе Санфилиппо |
Написана на | Си[2] |
Операционная система | Кроссплатформенный |
Языки интерфейса | англ. |
Первый выпуск | 8 мая 2009 |
Последняя версия | |
Репозиторий | github.com/redis/redis |
Состояние | активный |
Сайт | redis.io (англ.) |
Медиафайлы на Викискладе |
Redis (англ. remote dictionary server) — сетевое журналируемое хранилище данных типа «ключ — значение» с открытым исходным кодом. Нереляционная высокопроизводительная СУБД.
Дизайн
Хранит базу данных в оперативной памяти, снабжена механизмами снимков и журналирования для обеспечения постоянного хранения (на диске). Также предоставляет операции для реализации механизма обмена сообщениями в паттерне издатель-подписчик. С его помощью приложения могут создавать каналы, подписываться на них и помещать в каналы сообщения, которые будут получены всеми подписчиками (как IRC-чат). Поддерживает репликацию данных с основных узлов на несколько подчинённых (англ. master — slave replication). Также Redis поддерживает транзакции и пакетную обработку команд (выполнение пакета команд, получение пакета результатов).
Redis работает на большинстве POSIX-систем, таких как Linux, *BSD, Mac OS X без каких-либо дополнений. Linux и Mac OS X — две операционные системы, в которых был разработан и в большей степени протестирован Redis, поэтому VMware рекомендует использовать именно их для развёртывания. Официальной поддержки для сборок Windows нет, но доступны некоторые опции, позволяющие обеспечить работу Redis на этой системе[3]. Компания Microsoft активно работает над переносом Redis на Windows.
По состоянию на 15 июля 2011 года разработка Redis спонсировалась компанией VMware[4]. Начиная с мая 2013 года она спонсируется Pivotal Software[5].
В версии 2.6.0 добавлена поддержка Lua, позволяющего выполнять запросы на сервере. Lua позволяет атомарно совершить произвольную обработку данных на сервере и предназначена для использования в случае, когда нельзя достичь того же результата с использованием стандартных команд.
Поддерживаемые языки программирования
Множество языков программирования имеют библиотеки для работы с Redis: C, C++, C#, Clojure, Lisp, Erlang, Java, JavaScript, Haskell, Lua, Perl, PHP, Python, Ruby, Scala, Go, Tcl, Rust, Swift, Nim.
Модели данных
Все данные Redis хранит в виде словаря, в котором ключи связаны со своими значениями. Одно из ключевых отличий Redis от других хранилищ данных заключается в том, что значения этих ключей не ограничиваются строками. Поддерживаются следующие абстрактные типы данных:
- Строки
- Списки
- Множества
- Хеш-таблицы
- Упорядоченные множества
Тип данных значения определяет, какие операции (команды) доступны для него. Redis поддерживает такие высокоуровневые операции, как объединение и разность наборов, а также их сортировку.
Восстановление данных
Восстановление данных проводится двумя разными способами. Первый — это механизм снимков, в котором данные асинхронно переносятся из оперативной памяти в файл формата *RDB (расширение дампов Redis). Второй способ (с версии 1.1) — файл, доступный только для дозаписи, в котором хранится лог всех операций, изменявших данные в памяти.
Репликация
Redis поддерживает репликацию типа master-slave. Данные с любого сервера Redis могут реплицироваться произвольное количество раз. Репликация полезна для масштабирования чтения (но не записи) или при очень больших объёмах данных. Все данные, которые попадают на один узел Redis (который называется master), будут попадать также на другие узлы (называются slave). Для конфигурирования slave-узлов можно изменить опцию slaveof или аналогичную по написанию команду (узлы, запущенные без подобных опций, являются master-узлами).
Репликация помогает защитить данные, копируя их на другие сервера. Репликация также может быть использована для увеличения производительности, так как запросы на чтение могут обслуживаться slave-узлами. Эти узлы могут ответить слегка устаревшими данными, но для большинства приложений это приемлемо.
Система репликации Redis ещё не поддерживает автоматическую отказоустойчивость. Если master-узел выходит из строя, необходимо вручную выбрать новый master из списка slave-узлов. Необходимо использовать Redis Sentinel для мониторинга и автоматического переключения master-узлов, если необходима устойчивая к сбоям система.
Redis Sentinel
Redis Sentinel — это система, разработанная для помощи в управлении узлами Redis, выполняющая следующие задачи:
- Мониторинг: постоянно проверяется, что ведущий и ведомые узлы работают так, как ожидается;
- Уведомление: сообщает системному администратору или другой программе о том, что с отслеживаемыми узлами что-то не так;
- Автоматическое переключение: если ведущий узел не работает так, как ожидается, Sentinel может начать процесс восстановления работоспособности, в котором один из ведомых узлов объявляется как ведущий, другие ведомые узлы меняют конфигурацию на использование нового ведущего и приложение информируется об использовании нового адреса ведущего узла;
- Поставщик конфигурации: сообщение клиентам и другим Redis-узлам адрес текущего ведущего узла, в случае отказа Sentinel сообщает новый адрес.
Redis Sentinel входит в состав Redis начиная с версии 2.6 (Sentinel 1 — устарел). Начиная с версии Redis 2.8 поставляется текущая версия — Sentinel 2.
Sentinel не рекомендуется использовать в единственном экземпляре, кластер Sentinel-узлов поддерживает кворум, благодаря чему сохраняет работоспособность даже при переменном составе и временном отсутствии некоторых из них.
Производительность
Высокая производительность Redis обуславливается тем, что все данные хранятся в оперативной памяти. На Linux-сервере начального уровня был установлен результат в 110 000 запросов SET и 81 000 запросов GET в секунду[6].
Примечания
Ссылки
- redis.io — официальный сайт Redis
- Проект Redis на сайте GitHub
- Книга рецептов Redis 4.x [1], Пеньчень Хуань, Зуофей Вань, Packt Publishing Ltd., Февраль 2018, ISBN 978-1-78398-816-7, перевод отдельных глав