![]() | |
Оригинальный автор(ы) | Сальваторе Санфилиппо [1] [2] |
---|---|
Разработчик(и) | Редис [1] [2] |
Первоначальный выпуск | 26 февраля 2009 г ( 2009-02-26 ) | [3]
Стабильный релиз | 7.4.2 [4] / 6 января 2025 г. ( 6 января 2025 г. ) |
Репозиторий |
|
Написано в | С |
Операционная система | Unix-подобный [5] |
Доступно в | Английский |
Тип | Хранилище структур данных , база данных «ключ-значение» |
Лицензия | Доступная лицензия на исходный код Redis или SSPL [6] |
Веб-сайт | redis.io |
Redis ( / ˈ rɛ dɪ 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 означает 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 поддерживает не только строки , но и абстрактные типы данных:
Тип значения определяет, какие операции (называемые командами) доступны для значения. Redis поддерживает высокоуровневые, атомарные, серверные операции, такие как пересечение, объединение и разность между наборами, а также сортировку списков, наборов и отсортированных наборов.
Больше типов данных поддерживаются на основе API модулей Redis. Обратите внимание, что некоторые из них имеют двойную лицензию, а не подпадают под пункт BSD 3: [50]
Предыдущие реализации включают в себя:
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]
Redis написан на ANSI C и работает в большинстве систем POSIX, таких как Linux, *BSD, OS X, без внешних зависимостей.