Редис

Исходная доступная в памяти база данных «ключ-значение»
Редис
Оригинальный автор(ы)Сальваторе Санфилиппо [1] [2]
Разработчик(и)Редис [1] [2]
Первоначальный выпуск26 февраля 2009 г .; 15 лет назад [3] ( 2009-02-26 )
Стабильный релиз
7.4.2 [4]  / 6 января 2025 г. ; 29 дней назад ( 6 января 2025 г. )
Репозиторий
  • github.com/redis/redis
Написано вС
Операционная системаUnix-подобный [5]
Доступно вАнглийский
ТипХранилище структур данных , база данных «ключ-значение»
ЛицензияДоступная лицензия на исходный код Redis или SSPL [6]
Веб-сайтredis.io 

Redis ( / ˈ s / ; [7] [8] Удаленный сервер словарей ) [ 7] — это хранилище с доступом к исходному коду , находящееся в памяти, используемое в качестве распределенной базы данных «ключ-значение» в памяти , кэша и брокера сообщений с дополнительной долговечностью . [9] Поскольку Redis хранит все данные в памяти и благодаря своей конструкции, он обеспечивает чтение и запись с низкой задержкой , что делает его особенно подходящим для случаев использования, требующих кэширования. Redis — самая популярная база данных NoSQL [10] [11] [12] и одна из самых популярных баз данных в целом. [13] Компании, использующие Redis, включают Twitter , [14] [15] Airbnb , [16] Tinder , [17] Yahoo , [18] Adobe , [19] Hulu , [20] Amazon [21] и OpenAI . [22]

Redis поддерживает различные виды абстрактных структур данных , такие как строки , списки , карты , наборы , отсортированные наборы, HyperLogLogs , растровые изображения , потоки и пространственные индексы .

Проект был разработан и поддерживается Сальваторе Санфилиппо, начиная с 2009 года. [23] С 2015 по 2020 год он руководил основной командой проекта, спонсируемой Redis Labs . [24] Сальваторе Санфилиппо покинул Redis в качестве сопровождающего в 2020 году. [25] В 2021 году Redis Labs исключила Labs из своего названия и теперь известна просто как «Redis». [26]

В 2018 году некоторые модули для Redis приняли SSPL . [27] В 2024 году основной код Redis перешел на двойную лицензию под Redis Source Available License v2 и Server Side Public License v1. [6]

История

Сальваторе Санфилиппо, первоначальный разработчик Redis (фото сделано в 2015 году)

Название Redis означает Remote Dictionary Server (удалённый сервер словаря). [7] Проект Redis начался, когда Сальваторе Санфилиппо, по прозвищу antirez , первоначальный разработчик Redis, пытался улучшить масштабируемость своего итальянского стартапа, разрабатывая анализатор веб-журналов в реальном времени . Столкнувшись со значительными проблемами при масштабировании некоторых типов рабочих нагрузок с использованием традиционных систем баз данных, Санфилиппо в 2009 году начал прототипировать первую версию доказательства концепции Redis в Tcl . [28] Позже Санфилиппо перевёл этот прототип на язык C и реализовал первый тип данных — список. После нескольких недель успешного использования проекта внутри компании Санфилиппо решил открыть его исходный код, объявив о проекте на Hacker News . Проект начал набирать обороты, особенно среди сообщества Ruby, причём GitHub и Instagram были среди первых компаний, принявших его на вооружение. [29] [30]

Санфилиппо был нанят VMware в марте 2010 года. [31] [32] [33]

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

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

В августе 2018 года Redis Labs объявила о переходе на лицензию программного обеспечения с доступом к исходному коду , Server Side Public License для некоторых дополнительных модулей, доступных для Redis, [27] при этом подтвердив, что основное программное обеспечение останется лицензированным BSD. [36]

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

В июне 2020 года Сальваторе Санфилиппо ушел с поста единственного хранителя Redis. Санфилиппо сменили Йосси Готлиб и Оран Агра. [38] [39]

В марте 2024 года Redis перешел на другую фирменную лицензию программного обеспечения, названную Redis Source Available License v2, и Server Side Public License v1, также для своего основного репозитория, [6] нарушив обещание 2018 года. В результате Linux Foundation создал форк под названием Valkey , [40] позволив сопровождающим, участникам и пользователям сообщества продолжить работу над версией базы данных Redis с открытым исходным кодом.

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

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

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

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

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

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

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

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

Типы данных

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

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

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

Больше типов данных поддерживаются на основе API модулей Redis. Обратите внимание, что некоторые из них имеют двойную лицензию, а не подпадают под пункт BSD 3: [50]

  • JSON – RedisJSON [51] реализует ECMA-404 (стандарт обмена данными нотации объектов JavaScript) как собственный тип данных. [52]
  • Поиск — механизм запросов для Redis, обеспечивающий вторичную индексацию, полнотекстовый поиск, поиск по сходству векторов и агрегации. [53]
  • Временные ряды – RedisTimeSeries [54] реализует структуру данных временных рядов
  • Фильтр Блума , фильтр Кукушки , скетч Count–min и Top-K – RedisBloom [55] реализует набор вероятностных структур данных для Redis
  • Другие [56]

Предыдущие реализации включают в себя:

  • Граф – RedisGraph [57] реализует запрашиваемый граф свойств
    • RedisGraph был прекращен [58] и продолжил свое существование в форме ответвления под названием FalkorDB. [59]

Упорство

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

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

Репликация

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

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

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

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

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

Варианты использования

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

Amazon Web Services предлагает управляемый сервис Redis под названием ElastiCache для Redis, Google предлагает управляемый сервис Redis под названием Cloud Memorystore, [68] Microsoft предлагает Azure Cache для Redis в Azure , [69] а Alibaba предлагает ApsaraDB для Redis в Alibaba Cloud . [70]

Пользователи

Redis используется в таких компаниях, как Twitter, [14] [15] [71] AirBnB, [16] Tinder, [17] Yahoo, [18] Adobe, [19] Hulu, [20] и Amazon. [21]

Смотрите также

Ссылки

  1. ^ ab Bernardi, Stefano (4 января 2011 г.). «Интервью с Сальваторе Санфилиппо, создателем Redis, работающим на Сицилии». EU-Startups . Menlo Media.
  2. ^ ab Haber, Itamar (15 июля 2015 г.). "Сальваторе Санфилиппо: Добро пожаловать в Redis Labs". Redis Labs .
  3. ^ "Страница 7 из 7 - Redis - Архив Google Code - Долгосрочное хранилище для хостинга проектов Google Code". code.google.com . Получено 22 марта 2024 г. .
  4. ^ "Выпуск 7.4.2". 6 января 2025 г. Получено 29 января 2025 г.
  5. ^ "Введение в Redis". Redis написан на ANSI C и работает в большинстве систем POSIX, таких как Linux, *BSD, OS X, без внешних зависимостей.
  6. ^ abc "LICENSE.txt". GitHub . 20 марта 2024 г.
  7. ^ abcd "FAQ: Redis". Redis.io . Получено 12 февраля 2022 г. .
  8. ^ "Google Groups". groups.google.com . Получено 25 февраля 2022 г. .
  9. ^ "Redis". Redis . Получено 2023-07-22 .
  10. ^ ab "Рейтинг DB-Engines - рейтинг популярности хранилищ ключей и значений". DB-Engines .
  11. ^ Кларк, Линдси. «Redis становится самой популярной базой данных на AWS по мере роста числа развертываний сложных облачных приложений». www.theregister.com . Получено 22 июля 2023 г.
  12. ^ "Instablinks EP 07: Redis™ — самая популярная технология баз данных в памяти". Instaclustr . Получено 22 июля 2023 г.
  13. ^ "Рейтинг DB-Engines". DB-Engines . Получено 2023-07-22 .
  14. ^ ab Scaling Redis в Twitter, 31 августа 2014 г. , получено 22 июля 2023 г.
  15. ^ ab Использование Redis в масштабе в Twitter - Рашми Рамеш из Twitter - RedisConf17 -, 5 июля 2017 г. , получено 22 июля 2023 г.
  16. ^ ab AWS re:Invent 2018: Путь Airbnb от самоуправляемого Redis к ElastiCache для Redis (DAT319), 28 ноября 2018 г. , получено 22 июля 2023 г.
  17. ^ ab "Создание масштабной устойчивости в Tinder с помощью Amazon ElastiCache | Блог AWS Database". aws.amazon.com . 2020-01-30 . Получено 2023-07-22 .
  18. ^ ab AWS re:Invent 2022 - Как Yahoo оптимизирует затраты на свои рабочие нагрузки в памяти с помощью AWS (DAT321), 2 декабря 2022 г. , получено 22 июля 2023 г.
  19. ^ ab AWS re:Invent 2014 | (SDD402) Amazon ElastiCache Deep Dive, 17 ноября 2014 г. , получено 22 июля 2023 г.
  20. ^ ab "Hulu Case Study". Amazon Web Services, Inc. Получено 2023-07-22 .
  21. ^ ab "Пример миграции базы данных Amazon GameOn – Amazon Web Services (AWS)". Amazon Web Services, Inc. Получено 22 июля 2023 г.
  22. ^ "Повышенные ошибки API". status.openai.com . Получено 2023-10-28 .
  23. ^ "Беседа с Сальваторе Санфилиппо, создателем базы данных с открытым исходным кодом Redis". VentureBeat . 2016-06-20 . Получено 29-06-2021 .
  24. ^ Кепес, Бен (15 июля 2015 г.). «Redis Labs нанимает создателя Redis Сальваторе Санфилиппо». Network World . Получено 30 августа 2015 г.
  25. ^ Франциско, Томас Клэберн в Сан. «Маэстро баз данных Антирес говорит прибывшему Redis: Кажется, он хочет неструктурированную жизнь, пишущую код, а не структурированную, управляющую программным обеспечением». www.theregister.com . Получено 29.06.2021 .
  26. ^ "Стартап по базам данных Redis Labs проводит ребрендинг... просто как Redis". SiliconANGLE . 2021-08-11 . Получено 2021-08-11 .
  27. ^ ab Claburn, Thomas. «У Redis есть лицензия на убийство: создатель баз данных с открытым исходным кодом берет часть кода как собственность». www.theregister.com . Получено 21.03.2024 .
  28. ^ Санфилиппо, Сальваторе (28 апреля 2017 г.). "Tcl-прототип Redis". GitHub Gist . Получено 8 октября 2018 г.
  29. ^ Wanstrath, Chris (3 ноября 2009 г.). «Introducing Resque». Блог . Получено 8 октября 2018 г.
  30. ^ Кригер, Майк (31 октября 2011 г.). «Хранение сотен миллионов простых пар ключ-значение в Redis». Instagram Engineering Blog . Получено 8 октября 2018 г.
  31. ^ Шапира, Гвен (17 марта 2010 г.). «VMware нанимает ключевого разработчика Redis – но зачем?». Блог . Получено 25 сентября 2016 г.
  32. ^ Санфилиппо, Сальваторе (15 марта 2010 г.). "VMware: новый дом Redis". Блог . Получено 25 сентября 2016 г.
  33. ^ Коллисон, Дерек (15 марта 2010 г.). "VMware: The Console: VMware нанимает ключевого разработчика для Redis". Блог VMware . Архивировано из оригинала 22 марта 2010 г. Получено 25 сентября 2016 г.
  34. ^ Санфилиппо, Сальваторе. «Спонсоры Redis». Redis.io . Redis Labs . Получено 11 апреля 2019 г. .
  35. ^ Санфилиппо, Сальваторе (15 июля 2015 г.). «Спасибо Pivotal, привет Redis Labs». <antirez> . Получено 03.04.2019 .
  36. ^ Shoolman, Yiftach (22 августа 2018 г.). «Лицензия Redis — BSD и останется BSD». Redis.io . Redis Labs . Получено 30 сентября 2024 г. .
  37. ^ abc "Redis 5.0 уже здесь!". 22 октября 2018 г.
  38. ^ "Маэстро баз данных Антирес говорит о Redis: похоже, ему нужна неструктурированная жизнь, написанная по коду, а не структурированная жизнь, управляющая программным обеспечением". theregister.com .
  39. ^ "Конец приключения Redis -". antirez.com . Получено 2020-11-10 .
  40. ^ «Linux Foundation запускает сообщество Valkey с открытым исходным кодом».
  41. ^ "Лучшие базы данных NoSQL: отчет за осень 2015 г. от G2 Crowd". G2 Crowd. Архивировано из оригинала 2015-08-24 . Получено 2015-08-25 .
  42. ^ "8 удивительных фактов о реальном внедрении Docker". Datadog . 13 июня 2018 г.
  43. ^ "🏆 50 лучших инструментов разработчика 2019 года". StackShare . Получено 28.07.2020 .
  44. ^ "Результаты опроса разработчиков 2021: самые любимые, ужасные и желанные базы данных". Stack Overflow . Stack Exchange . Получено 23.08.2021 .
  45. ^ "EVAL – Redis". redis.io .
  46. ^ ab "Redis". redis.io .
  47. ^ "Danieleteti/Delphiredisclient". GitHub . 17 сентября 2022 г.
  48. ^ Льюис, Б. В. (5 июля 2015 г.). "rredis: клиент базы данных "ключ/значение" "Redis". Комплексная сеть архивов R. Получено 03.04.2019 .
  49. ^ "Redis 3.2 Release Notes". GitHub . Получено 2017-03-10 .
  50. ^ "Обзор лицензирования Redis". Redis . Получено 2023-09-30 .
  51. ^ «RedisJSON — тип данных JSON для Redis».
  52. ^ "RedisJSON — тип данных JSON для Redis". redisjson.io .
  53. ^ RediSearch, RediSearch, 2023-09-30 , получено 2023-09-30
  54. ^ «RedisTimeSeries — структура данных временных рядов для Redis».
  55. ^ «RedisBloom — модуль вероятностных типов данных для Redis».
  56. ^ "Модули". Redis . Получено 2023-09-30 .
  57. ^ «RedisGraph — модуль графовой базы данных для Redis».
  58. ^ Коган, Лиор (2023-07-05). "Объявление об окончании срока службы RedisGraph". Redis . Получено 2023-09-30 .
  59. ^ FalkorDB, FalkorDB, 2023-09-29 , получено 2023-09-30
  60. ^ "Виртуальная память". Redis.io . Получено 11 апреля 2019 г. .
  61. ^ "Архив Google Code — долгосрочное хранилище для хостинга проектов Google Code". code.google.com .
  62. ^ "Redis на Raspberry Pi: приключения в неприсоединившихся землях - <antirez>". antirez.com .
  63. ^ "Redis 3.0 Release Notes". GitHub . Получено 2017-03-10 .
  64. ^ "Cluster Spec" . Получено 2017-03-10 .
  65. ^ "Cluster Spec" . Получено 2017-03-10 .
  66. ^ "Учебник по кластерам" . Получено 2017-03-10 .
  67. ^ "5 лучших вариантов использования Redis - ObjectRocket". ObjectRocket . Rackspace. 7 ноября 2017 г.
  68. ^ "Memorystore: хранилище данных в памяти". Google Cloud . Получено 2023-02-03 .
  69. ^ "Azure Redis Cache - Облачная служба кэша Redis - Microsoft Azure". azure.microsoft.com .
  70. ^ «ApsaraDB для Redis: ключевая служба баз данных — Alibaba Cloud». www.alibabacloud.com .
  71. ^ «Как Twitter использует Redis для масштабирования — 105 ТБ ОЗУ, 39 млн запросов в секунду, 10 000+ экземпляров — высокая масштабируемость». Highscalability.com . 8 сентября 2014 г.

Дальнейшее чтение

  • Изабель Дрост и Ян Ленард (29 октября 2009 г.), События: конференция NoSQL, Берлин, The H. Слайды для презентации Redis. Резюме.
  • Билли Ньюпорт (IBM): «Развитие модели программирования ключ/значение на более высоком уровне», конференция Qcon 2009 г., Сан-Франциско.
  • А Мишра: «Установка и настройка Redis на сервере Centos/Fedora».
  • Э. Музакитис: «Мониторинг производительности Redis»
  • Официальный сайт
  • Valkey: Текущая разработка оригинального программного обеспечения Redis с лицензией BSD
Взято с "https://en.wikipedia.org/w/index.php?title=Redis&oldid=1267619487"