Redis

редактировать
База данных ключ-значение с открытым исходным кодом в памяти
Redis
Redis Logo.svg
Автор (ы) Сальваторе Санфилиппо
Разработчик Redis Labs
Первоначальный выпуск10 мая 2009 г.; 11 лет назад (2009-05-10)
Стабильный выпуск 6.0.9 / 26 октября 2020 г.; 8 дней назад (2020-10-26)
Репозиторий Измените это в Wikidata
Написано наANSI C
Операционная система Unix-like
Доступно наанглийском языке
Тип Хранилище структуры данных, база данных ключ-значение
Лицензия BSD 3-пункт
Веб-сайтredis.io

Redis (; Remote Dictionary Server ) - это проект структуры данных в памяти, реализующий распределенный, in-memory key–value база данных с необязательной стойкостью. Redis поддерживает различные типы абстрактных структур данных, такие как строки, списки, карты, наборы, отсортированные наборы, HyperLogLogs, растровые изображения, потоки и пространственные индексы. Проект разрабатывается и поддерживается основной командой проекта, а с 2015 года его спонсирует Redis Labs. Это программное обеспечение с открытым исходным кодом, выпущенное по лицензии BSD с тремя пунктами.

Содержание
  • 1 История
  • 2 Отличия от других систем баз данных
  • 3 Популярность
  • 4 Поддерживаемые языки
  • 5 Типы данных
  • 6 Постоянство
  • 7 Репликация
  • 8 Производительность
  • 9 Кластеризация
  • 10 Сценарии использования
  • 11 См. Также
  • 12 Ссылки
  • 13 Дополнительная литература
  • 14 Внешние ссылки
История

Имя Redis означает REmote DIctionary Server. Проект Redis начался, когда Сальваторе Санфилиппо по прозвищу Антирез, первоначальный разработчик Redis, пытался улучшить масштабируемость своего итальянского стартапа, разработав анализатор веб-журналов в реальном времени. Столкнувшись со значительными проблемами при масштабировании некоторых типов рабочих нагрузок с использованием традиционных систем баз данных, Sanfilippo приступил к созданию прототипа первой экспериментальной версии Redis в Tcl. Позже Санфилиппо перевел этот прототип на язык C и реализовал первый тип данных - список. После нескольких недель успешного использования проекта внутри компании Sanfilippo решила открыть его исходный код, анонсировав проект на Hacker News. Проект начал набирать обороты, особенно в сообществе Ruby, причем GitHub и Instagram были среди первых компаний, принявших его.

Санфилиппо наняли VMware в марте 2010 года.

В мае 2013 года Redis спонсировалась Pivotal Software (дочерняя компания VMware).

В июне 2015 года, разработка была спонсирована Redis Labs.

В октябре 2018 года был выпущен Redis 5.0, представляющий Redis Stream - новую структуру данных, которая позволяет хранить несколько полей и строковых значений с автоматической последовательностью, основанной на времени, с одним ключом.

В июне 2020 года Сальваторе Санфилиппо покинул redis / Redis Labs.

Различия с другими системами баз данных

Redis популяризировал идею системы, которую можно рассматривать одновременно как хранилище и кеш, используя дизайн, в котором данные всегда модифицируется и читается из основной памяти компьютера, но также сохраняется на диске в формате, который не подходит для произвольного доступа к данным, а только для восстановления данных обратно в память после перезапуска системы. В то же время Redis предоставляет модель данных, очень необычную по сравнению с системой управления реляционными базами данных (RDBMS). Пользовательские команды не описывают запрос, который должен быть выполнен ядром базы данных, а скорее специфические операции, выполняемые с заданными абстрактными типами данных. Следовательно, данные должны храниться таким образом, чтобы впоследствии их можно было быстро найти, без помощи системы баз данных в форме вторичных индексов, агрегатов или других общих функций традиционных СУБД. Реализация Redis интенсивно использует системный вызов fork, чтобы дублировать процесс, содержащий данные, так что родительский процесс продолжает обслуживать клиентов, а дочерний процесс создает копию данных на диске.

Популярность

Согласно ежемесячному рейтингу DB-Engines, Redis часто является самой популярной базой данных «ключ-значение». Redis также заняла 4-е место NoSQL по удовлетворенности пользователей и присутствию на рынке на основе отзывов пользователей, самой популярной базе данных NoSQL в контейнерах и 4-м хранилище данных 2019 года по рейтингу веб-сайта stackshare.io. Она была признана самой любимой базой данных в опросе разработчиков Stack Overflow в 2017, 2018, 2019 и 2020 годах.

Поддерживаемые языки

Начиная с версии 2.6, Redis имеет серверные сценарии на языке Lua.

Многие языки программирования имеют привязки Redis к языку на стороне клиента, в том числе: ActionScript, C, C ++, C#, Chicken, Clojure, Common Lisp, Crystal, D, Dart, Эликсир, Erlang, Go, Haskell, Haxe, Io, Java, JavaScript (Node.js ), Julia, Lua, Objective-C, OCaml, Perl, PHP, Pure Data, Python, R, Racket, Ruby, Rust, Scala, Smalltalk, Swift и Tcl. На этих языках существует несколько клиентских программ.

Типы данных

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

  • Списки строк
  • Наборы строк (коллекции неповторяющихся несортированных элементов)
  • Сортированные наборы строк (коллекции неповторяющихся элементов, упорядоченные по числу с плавающей запятой, называемому счетом)
  • Хеш таблицы, где ключи и значения представляют собой строки
  • HyperLogLogs, используемые для приблизительной оценки размера множества элементов, доступны с Redis 2.8.9 в апреле 2014 года.
  • Поток записей с группами потребителей позволяет вам для хранения нескольких полей и строковых значений с автоматической последовательностью, основанной на времени, с одним ключом, доступным с Redis 5.0 в октябре 2018 года
  • Геопространственные данные с помощью реализации метода geohash, доступно начиная с Redis 3.2.

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

На основе Redis Modules API поддерживаются другие типы данных. Модуль Redis RedisJSON реализует ECMA-404 (стандарт обмена данными JavaScript Object Notation (JSON )) как собственный тип данных.

Persistence

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

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

Репликация

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

Производительность

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

Кластеризация

Redis представил кластеризацию в апреле 2015 года с выпуском версии 3.0. Спецификация cluster реализует подмножество команд Redis: доступны все одноклавишные команды, многоклавишные операции (команды, связанные с объединениями и пересечениями) ограничены ключами, принадлежащими одному и тому же узлу, а команды, относящиеся к операции выбора базы данных недоступны. Кластер Redis может масштабироваться до 1000 узлов, обеспечивать «приемлемую» безопасность записи и продолжать операции при выходе из строя некоторых узлов.

Сценарии использования

Типичное использование из-за особенностей конструкции базы данных К случаям относятся кэширование сеанса, кеширование всей страницы, приложения очереди сообщений, списки лидеров и подсчет и другие. Крупные компании, такие как Twitter, используют Redis, Amazon Web Services предлагает Redis в своем портфеле, Microsoft предлагает Redis Cache в Azure и Alibaba предлагает Redis в Alibaba Cloud.

См. Также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
Ссылки
Дополнительная литература
Внешние ссылки
Последняя правка сделана 2021-06-03 11:11:22
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте