Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Redis ( / г ɛ д ɪ с / ; [6] [7] Удаленный сервер словарь ) [6] представляет собой в памяти структуры данных магазина, используется в качестве распределенной , в памяти ключ-значение базы данных , кэш и сообщений брокера , с дополнительной прочностью . Redis поддерживает различные типы абстрактных структур данных , такие как строки , списки , карты , наборы , отсортированные наборы, HyperLogLogs , растровые изображения ,потоки и пространственные индексы . Проект разрабатывается и поддерживается основной командой проекта, а с 2015 года спонсируется Redis Labs . [8] Это программное обеспечение с открытым исходным кодом, выпущенное по лицензии BSD с тремя пунктами. [5]

История [ править ]

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

Санфилиппо был нанят VMware в марте 2010 года. [12] [13] [14]

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

В июне 2015 года разработку спонсировала Redis Labs . [16]

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

В июне 2020 года Сальваторе Санфилиппо ушел с поста сопровождающего Redis. [18] [19]

Отличия от других систем баз данных [ править ]

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

Популярность [ править ]

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

Поддерживаемые языки [ править ]

Начиная с версии 2.6, Redis поддерживает серверные сценарии на языке Lua . [25]

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

Типы данных [ править ]

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

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

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

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

Настойчивость [ править ]

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

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

Репликация [ править ]

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

Производительность [ править ]

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

Кластеризация [ править ]

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

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

Из-за характера структуры базы данных типичными вариантами использования являются, среди прочего, кэширование сеанса, полное кеширование страницы, приложения очереди сообщений, списки лидеров и подсчет. [38] Крупные компании, такие как Twitter, используют Redis, [39] Amazon Web Services предлагает управляемый сервис Redis под названием Elasticache для Redis, Microsoft предлагает кэш Azure для Redis в Azure , [40] и Alibaba предлагает ApsaraDB для Redis в облаке Alibaba. . [41]

См. Также [ править ]

  • NoSQL
  • Amazon ElastiCache
  • Бесконфликтный реплицированный тип данных
  • Memcached

Ссылки [ править ]

  1. ^ a b Бернарди, Стефано (4 января 2011 г.). «Интервью с Сальваторе Санфилиппо, создателем Redis, работающим на Сицилии» . ЕС-Стартапы . Menlo Media.
  2. ↑ a b Haber, Itamar (15 июля 2015 г.). «Сальваторе Санфилиппо: Добро пожаловать в Redis Labs» . Redis Labs .
  3. ^ "Выпуск 6.2.1" . 2 марта 2021 . Проверено 16 марта 2021 года .
  4. ^ «Введение в Redis» . Redis написан на ANSI C и работает в большинстве систем POSIX, таких как Linux, * BSD, OS X, без внешних зависимостей.
  5. ^ a b «Копирование» . GitHub .
  6. ^ a b c d "FAQ: Redis" . Redis.io .
  7. ^ "Группы Google" . groups.google.com .
  8. ^ Кепеш, Бен (15 июля 2015). «Redis Labs нанимает создателя Redis Сальваторе Санфилиппо» . Сетевой мир . Проверено 30 августа 2015 года .
  9. ^ Sanfilippo, Salvatore (28 апреля 2017). «Tcl-прототип Redis» . GitHub Gist . Проверено 8 октября 2018 года .
  10. ^ Wanstrath, Крис (3 ноября 2009). «Представляем Resque» . Блог . Проверено 8 октября 2018 года .
  11. Кригер, Майк (31 октября 2011 г.). «Хранение сотен миллионов простых пар ключ-значение в Redis» . Инженерный блог Instagram . Проверено 8 октября 2018 года .
  12. Шапира, Гвен (17 марта 2010 г.). «VMware нанимает ключевого разработчика Redis - но почему?» . Блог . Проверено 25 сентября 2016 года .
  13. ^ Sanfilippo, Salvatore (15 марта 2010). «VMware: новый дом Redis» . Блог . Проверено 25 сентября 2016 года .
  14. Рианна Коллисон, Дерек (15 марта 2010 г.). «VMware: Консоль: VMware нанимает ключевого разработчика для Redis» . Блог VMware . Архивировано из оригинального 22 марта 2010 года . Проверено 25 сентября 2016 года .
  15. ^ Санфилиппо, Сальваторе. «Спонсоры Redis» . Redis.io . Redis Labs . Проверено 11 апреля 2019 года .
  16. ^ Sanfilippo, Salvatore (15 июля 2015). «Спасибо, Pivotal, Hello Redis Labs» . <антирез> . Проверено 3 апреля 2019 .
  17. ^ а б в https://redislabs.com/blog/redis-5-0-is-here/
  18. ^ https://www.theregister.com/2020/06/30/redis_creator_antirez_quits/ источник
  19. ^ "Конец приключения Redis -" . antirez.com . Проверено 10 ноября 2020 .
  20. ^ «DB-Engines Ranking - рейтинг популярности магазинов с ключом-значением» . DB-Двигатели .
  21. ^ «Лучшие базы данных NoSQL: отчет G2 Crowd за осень 2015 года» . G2 Crowd.
  22. ^ «8 удивительных фактов о реальном внедрении Docker» . Датадог .
  23. ^ «🏆 50 лучших инструментов разработчика 2019 года» . StackShare . Проверено 28 июля 2020 .
  24. ^ «Результаты опроса разработчиков 2019: самые любимые, страшные и разыскиваемые базы данных» . Переполнение стека . Обмен стеками . Проверено 10 ноября 2018 .
  25. ^ "EVAL - Redis" . redis.io .
  26. ^ a b "Redis" . redis.io .
  27. Льюис, BW (5 июля 2015 г.). "rredis:" Redis "Клиент базы данных ключей / значений" . Комплексная R архивной сети . Проверено 3 апреля 2019 .
  28. ^ «Примечания к выпуску Redis 3.2» . GitHub . Проверено 10 марта 2017 .
  29. ^ «Модули Redis: введение в API» . redis.io . Проверено 10 июля 2019 .
  30. ^ «RedisJSON - тип данных JSON для Redis» . redisjson.io .
  31. ^ «Виртуальная память» . Redis.io . Проверено 11 апреля 2019 года .
  32. ^ «Архив Google Code - Долгосрочное хранилище для хостинга проектов Google Code» . code.google.com .
  33. ^ "Redis на Raspberry Pi: приключения в невыровненных землях - <антирез>" . antirez.com .
  34. ^ «Примечания к выпуску Redis 3.0» . Проверено 10 марта 2017 .
  35. ^ «Спецификация кластера» . Проверено 10 марта 2017 .
  36. ^ «Спецификация кластера» . Проверено 10 марта 2017 .
  37. ^ «Учебное пособие по кластерам» . Проверено 10 марта 2017 .
  38. ^ «Топ-5 примеров использования Redis - ObjectRocket» . ObjectRocket . Rackspace. 7 ноября 2017.
  39. ^ «Как Twitter использует Redis для масштабирования - 105 ТБ ОЗУ, 39 ММ QPS, 10 000+ экземпляров - высокая масштабируемость» . Highscalability.com .
  40. ^ «Кэш Redis для Azure - облачная служба кеширования Redis - Microsoft Azure» . azure.microsoft.com .
  41. ^ «ApsaraDB для Redis: служба базы данных ключевых значений - облако Alibaba» . www.alibabacloud.com .

Дальнейшее чтение [ править ]

  • Джереми Заводни, Redis: Lightweight key / value Store That Goes the Extra Mile , Linux Magazine , 31 августа 2009 г.
  • Изабель Дрост и Ян Lehnard (29 октября 2009), Happenings: NoSQL конференции, Берлин , Н . Слайды для презентации Redis. Резюме .
  • Билли Ньюпорт (IBM): « Развитие модели программирования ключ / значение на более высокий уровень » Конференция Qcon 2009, Сан-Франциско.
  • Мишра: « Установить и настроить Redis на сервере Centos / Fedora ».
  • Э. Музакитис: « Мониторинг производительности Redis »

Внешние ссылки [ править ]

  • Официальный веб-сайт