Топ питань
Часова шкала
Чат
Перспективи
Redis
З Вікіпедії, вільної енциклопедії
Remove ads
Redis — розподілене сховище пар ключ-значення, які зберігаються в оперативній пам'яті, з можливістю забезпечувати довговічність зберігання на бажання користувача. Це програмне забезпечення з відкритим початковим кодом написане на ANSI C. Розробка Redis фінансується VMware.[2][3] Код проєкту поширювався в рамках ліцензії BSD, але з версії 7.4 був змінений на Redis Source Available License або SSPL[1]
Redis надає схожі на Memcached функції для зберігання даних в форматі ключ/значення, розширені підтримкою структурованих даних, таких як списки, хеші і множини. На відміну від Memcached, Redis забезпечує постійне зберігання даних на диску і гарантує збереження БД у разі аварійного завершення роботи. Клієнтські бібліотеки доступні для більшості популярних мов, включаючи Perl, Python, PHP, Java, Ruby і Tcl.
Є підтримка транзакцій, що дозволяють виконати за один крок групу команд, гарантуючи несуперечність і послідовність (команди від інших запитів не можуть вклинитися) виконання заданого набору команд, а в разі проблем дозволяючи відкотити зміни. Всі дані у повному обсязі кешуються в оперативній пам'яті. Зберігання всіх даних в оперативній пам'яті дозволяє досягнути значної продуктивності: при тестуванні Redis на сервері з CPU Xeon X3320 2.5 ГГц вдалося забезпечити 110000 операцій запису і 81000 операцій читання за секунду.[4]
Для управління даними підтримуються такі команди, як інкремент/декремент, стандартні операції над списками і множинами (об'єднання, перетин), перейменування ключів, множинні вибірки та функції сортування. Підтримується два режими зберігання: періодична синхронізація даних на диск і ведення на диску логу змін. У другому випадку гарантується повне збереження всіх змін. Можлива організація master-slave реплікації даних на кілька серверів, здійснювана в неблокуючому режимі. Доступний також режим обміну повідомленнями «публікація/підписка», при якому створюється канал, повідомлення з якого поширюються клієнтам, що підписані на канал.
Remove ads
Підтримувані мови
Мови, для яких існують прив'язки бібліотек Redis[5]:
- ActionScript
- C
- C++
- C#
- Clojure
- Common Lisp
- Erlang
- Go
- Haskell
- haXe
- Io
- Java
- Node.js
- Lua
- Objective-C
- Perl
- PHP
- Pure Data
- Python
- Ruby
- Scala
- Smalltalk
- Tcl.
Від версії 2.6 у Redis вбудований інтерпретатор Lua і підтримуються скрипти на мові Lua, що працюють на стороні сервера.
Модель даних
На зовнішньому рівні абстракції, модель даних в Redis це асоціативний масив в якому ключі відображаються в значення. Основною відмінністю між Redis та іншими базами такого типу в тому, що значення словника не обмежені рядковими типами. На додачу до рядків підтримуються наступні абстрактні типи даних:
- Списки рядків
- Множини рядків (невпорядкований набір неповторюваних елементів)
- Впорядковані множини рядків (набори неповторюваних елементів впорядкованих за пов'язаним значенням з рухомою комою)
- Хеші в яких ключі і значення є рядками
Тип значення визначає які операції є доступними для цього значення. Redis підтримує високорівневі атомні операції на стороні сервера, такі як перетин, об'єднання та різниця між множинами та списками.
Remove ads
Персистентність
Redis зазвичай тримає всі дані в оперативній пам'яті. До версії 2.4 існувала можливість налаштувати роботу з віртуальною пам'яттю[6] але зараз це не рекомендовано. Персистентність досягається двома шляхами, перший з яких називається знімкування (англ. snapshotting), і є напівперсистентним режимом довговічності, в якому дані час від часу асинхронно передаються з пам'яті на диск. З версії 1.1 безпечнішою альтернативою є файл який можна лише доповнювати (журнал транзакцій), і в який доповнюється всіма операціями що модифікують дані в пам'яті. Redis має можливість переписувати файл з нуля в фоновому режимі для того щоб уникнути нескінченного росту його довжини.
Реплікація і розподіленість
Redis підтримує реплікацію master-slave. Дані з будь-якого сервера Redis можуть реплікуватись довільною кількістю разів. Реплікація корисна для масштабування читання (але не запису) чи надлишковості даних.[7]
Починаючи з версії 3.0, що вийшла навесні 2015[8], з базою інтегрований Redis Cluster для створення розподілених сховищ.[9] Redis Cluster дозволяє розгорнути конфігурацію в якій дані автоматично розподіляються між декількома вузлами Redis. Можливе створення відмовостійких конфігурацій, при яких дані дублюються на різних вузлах і вихід одного вузла з ладу не призводить до зупинки,
Remove ads
Продуктивність
Коли в довговічності даних немає потреби, розміщення даних в пам'яті допомагає Redis показувати набагато кращі результати ніж СУБД які записують кожну зміну на диск, перш ніж вважають транзакцію завершеною.[10] Між операціями читання та запису немає помітної різниці в швидкості.
Ліцензування
Узагальнити
Перспектива
У березні 2025, починаючи з випуску 7.4 Redis перейшов[1] з ліцензії BSD на використання ліцензій RSALv2 (Redis Source Available License v2) і SSPLv1 (Server Side Public License v1), які призводять до дискримінації окремих категорій користувачів, що не дозволяє вважати їх відкритими чи вільними. За своїми цілями обидві ліцензії схожі одна на одну, а відмінності зводяться до того, що ліцензія SSPL заснована на копілефт ліцензії AGPLv3, а ліцензія RSAL заснована на пермісивній ліцензії BSD. Ліцензія RSAL дозволяє використовувати, змінювати, розповсюджувати та інтегрувати код до програм, за винятком випадків, коли ці програми є комерційними або використовуються для надання керованих платних сервісів. Ліцензія SSPL додатково містить вимогу поставки під тією самою ліцензією не лише коду самої програми, але й сирцевих текстів усіх компонентів, залучених до надання хмарного сервісу.
У відповідь на таку зміну в квітні 2025 відбувся[11] реліз СКБД Valkey 8.1, форку Redis після її переходу на власницьку ліцензію. Проект розвивається на нейтральному майданчику під заступництвом організації Linux Foundation за участю розробників з таких компаній, як Amazon, Google, Oracle, Ericsson та Snap. До розробки Valkey приєднався Маделін Олсон (Madelyn Olson), колишній мейнтейнер Redis. Код проекту написаний мовою C та поширюється під ліцензією BSD.
Remove ads
Дивись також
Примітки
Посилання
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads