Redis

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Redis
Тип Документно-орієнтована база даних
Розробник Сальваторе Санфіліпо
Перший випуск 2009
Стабільний випуск 4.0.0 (14 липня 2017; 6 років тому (2017-07-14))
Операційна система Крос-платформне
Мова програмування ANSI C
Доступні мови Англійська
Стан розробки Активне
Ліцензія BSD
Репозиторій github.com/redis/redis
Вебсайт redis.io

Redis — розподілене сховище пар ключ-значення, які зберігаються в оперативній пам'яті, з можливістю забезпечувати довговічність зберігання на бажання користувача. Це програмне забезпечення з відкритим сирцевим кодом написане на ANSI C. Розробка Redis фінансується VMware.[1][2] Сирцеві тексти проєкту поширюються в рамках ліцензії BSD.

Redis надає схожі на Memcached функції для зберігання даних в форматі ключ/значення, розширені підтримкою структурованих даних, таких як списки, хеші і множини. На відміну від Memcached, Redis забезпечує постійне зберігання даних на диску і гарантує збереження БД у разі аварійного завершення роботи. Клієнтські бібліотеки доступні для більшості популярних мов, включаючи Perl, Python, PHP, Java, Ruby і Tcl.

Є підтримка транзакцій, що дозволяють виконати за один крок групу команд, гарантуючи несуперечність і послідовність (команди від інших запитів не можуть вклинитися) виконання заданого набору команд, а в разі проблем дозволяючи відкотити зміни. Всі дані у повному обсязі кешуються в оперативній пам'яті. Зберігання всіх даних в оперативній пам'яті дозволяє досягнути значної продуктивності: при тестуванні Redis на сервері з CPU Xeon X3320 2.5 ГГц вдалося забезпечити 110000 операцій запису і 81000 операцій читання за секунду.[3]

Для управління даними підтримуються такі команди, як інкремент/декремент, стандартні операції над списками і множинами (об'єднання, перетин), перейменування ключів, множинні вибірки та функції сортування. Підтримується два режими зберігання: періодична синхронізація даних на диск і ведення на диску логу змін. У другому випадку гарантується повне збереження всіх змін. Можлива організація master-slave реплікації даних на кілька серверів, здійснювана в неблокуючому режимі. Доступний також режим обміну повідомленнями «публікація/підписка», при якому створюється канал, повідомлення з якого поширюються клієнтам, що підписані на канал.

Підтримувані мови[ред. | ред. код]

Мови, для яких існують прив'язки бібліотек Redis[4]:

Від версії 2.6 у Redis вбудований інтерпретатор Lua і підтримуються скрипти на мові Lua, що працюють на стороні сервера.

Модель даних[ред. | ред. код]

На зовнішньому рівні абстракції, модель даних в Redis це асоціативний масив в якому ключі відображаються в значення. Основною відмінністю між Redis та іншими базами такого типу в тому, що значення словника не обмежені рядковими типами. На додачу до рядків підтримуються наступні абстрактні типи даних:

  • Списки рядків
  • Множини рядків (невпорядкований набір неповторюваних елементів)
  • Впорядковані множини рядків (набори неповторюваних елементів впорядкованих за пов'язаним значенням з рухомою комою)
  • Хеші в яких ключі і значення є рядками

Тип значення визначає які операції є доступними для цього значення. Redis підтримує високорівневі атомні операції на стороні сервера, такі як перетин, об'єднання та різниця між множинами та списками.

Персистентність[ред. | ред. код]

Redis зазвичай тримає всі дані в оперативній пам'яті. До версії 2.4 існувала можливість налаштувати роботу з віртуальною пам'яттю[5] але зараз це не рекомендовано. Персистентність досягається двома шляхами, перший з яких називається знімкування (англ. snapshotting), і є напівперсистентним режимом довговічності, в якому дані час від часу асинхронно передаються з пам'яті на диск. З версії 1.1 безпечнішою альтернативою є файл який можна лише доповнювати (журнал транзакцій), і в який доповнюється всіма операціями що модифікують дані в пам'яті. Redis має можливість переписувати файл з нуля в фоновому режимі для того щоб уникнути нескінченного росту його довжини.

Реплікація і розподіленість[ред. | ред. код]

Redis підтримує реплікацію master-slave. Дані з будь-якого сервера Redis можуть реплікуватись довільною кількістю разів. Реплікація корисна для масштабування читання (але не запису) чи надлишковості даних.[6]

Починаючи з версії 3.0, що вийшла навесні 2015[7], з базою інтегрований Redis Cluster для створення розподілених сховищ.[8] Redis Cluster дозволяє розгорнути конфігурацію в якій дані автоматично розподіляються між декількома вузлами Redis. Можливе створення відмовостійких конфігурацій, при яких дані дублюються на різних вузлах і вихід одного вузла з ладу не призводить до зупинки,

Продуктивність[ред. | ред. код]

Коли в довговічності даних немає потреби, розміщення даних в пам'яті допомагає Redis показувати набагато кращі результати ніж СУБД які записують кожну зміну на диск, перш ніж вважають транзакцію завершеною.[9] Між операціями читання та запису немає помітної різниці в швидкості.

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. VMware: the new Redis home. Архів оригіналу за 22 березня 2010. Процитовано 3 листопада 2011.
  2. VMWare: The Console: VMware hires key developer for Redis. Архів оригіналу за 22 березня 2010. Процитовано 3 листопада 2011.
  3. Релиз БД Redis 2.6 [Архівовано 25 жовтня 2012 у Wayback Machine.] // opennet.ru 24.10.2012
  4. Redis language bindings. Архів оригіналу за 8 лютого 2014. Процитовано 3 листопада 2011.
  5. Документація Redis «Virtual Memory» [Архівовано 24 грудня 2010 у Wayback Machine.], redis.io
  6. Архівована копія. Архів оригіналу за 29 травня 2013. Процитовано 3 листопада 2011.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
  7. Redis 3.0.0 is out. Архів оригіналу за 22 січня 2011. Процитовано 2 квітня 2015.
  8. Выпуск БД Redis 3.0. Архів оригіналу за 2 квітня 2015. Процитовано 2 квітня 2015.
  9. FAQ. Архів оригіналу за 16 липня 2013. Процитовано 3 листопада 2011.

Посилання[ред. | ред. код]