Redis та області його застосування, Записки програміста
Redis та сфери його застосування
Redis (REmote DIctionary Server) – це нереляційна високопродуктивна СУБД. Redis зберігає всі дані у пам'яті, доступ до даних здійснюється за ключом. Опційно копія даних може зберігатися на диску. Цей підхід забезпечує продуктивність, яка в десятки разів перевищує продуктивність реляційних СУБД, а також спрощує секціонування (шардинг) даних.
Коротко про головне
У першому наближенні може здатися, що Redis мало чим відрізняється від Memcached. Як Redis, так і Memcached зберігають дані в пам'яті і здійснюють доступ до них по ключу. Обидва написані на Сі та поширюються під ліцензією BSD. Але насправді, між Redis і Memcahced більше відмінностей, ніж подібність.
Redis, на відміну від Memcached, дозволяє зберігати не тільки рядки, але і масиви (які можуть використовуватися як черги або стеки), словники, безлічі без повторів, великі масиви біт (bitmaps), а також безлічі, відсортовані за певною величиною. Зрозуміло, можна працювати з окремими елементами списків, словників та множин. Як і Memcached, Redis дозволяє вказати час життя даних (двома способами - "видалити тоді-то" і "видалити через ..."). За промовчанням усі дані зберігаються вічно.
Цікава особливість Redis полягає в тому, що це - однопотоковий сервер . Таке рішення сильно спрощує підтримку коду, забезпечує атомарність операцій та дозволяє запустити по одному процесу Redis на кожне ядро процесора. Зрозуміло, кожен процес прослуховуватиме свій порт. Рішення нетипове, але цілком виправдане, тому що на виконання однієї операції Redis витрачає дуже невелику кількість часу (близько однієї стотисячної секунди).
У Redisєреплікація. Реплікація з кількома основними серверами не підтримується. Кожен підлеглий сервер може у ролі головного іншим. Реплікація в Redis не призводить до блокувань ні головному сервері, ні підлеглих. На репліках дозволено операцію запису. Коли головний та підлеглий сервер відновлюють з'єднання після розриву, відбувається повна синхронізація (resync).
Також Redis підтримуєтранзакції (будуть послідовно виконані або всі операції, або жодної) тапакетну обробку команд (виконуємо пачку команд, потім отримуємо пачку результатів). До того ж ніщо не заважає використовувати їх спільно.
Ще одна особливість Redis - підтримка механізму publish/subscribe9. За його допомогою програми можуть створювати канали, підписуватись на них та поміщати у канали повідомлення, які будуть отримані всіма передплатниками. Щось на кшталт IRC-чатика.
Також хотілося б зазначити таке:
Так для яких цілей можна використовувати Redis?
Області застосування
Найсерйозніше обмеження Redis полягає в тому, що обсяг даних, який може зберігатись на одному фізичному сервері, обмежений обсягом оперативної пам'яті на цьому сервері. Була спроба обійти це обмеження за рахунок використання віртуальної пам'яті, але ця ідея була визнана невдалою. Таким чином, зберігати в Redis багато даних коштує недешево.
Дозволю собі навести цитату з The Little Redis Book:
Це той тип систем, які ви використовуєте на вирішення специфічних завдань. У цьому сенсі Redis близький до движка, що індексує. Ви не будете писати вашу програму повністю на Lucene, але якщо вам потрібна хороша система пошуку, вона подарує вам корисний досвід.
На думку спадають такі варіанти використанняRedis:
- Сховище сесій та профілів користувачів;
- Сервер черг плюс тримаємо в умі механізм publish/subscribe ;
- Повноцінна заміна Memcached, причому у випадку з Redis ми отримаємо реплікацію, довші ключі та значення, можливість відновлення кешу з диска тощо;
- Місце для зберігання кількості користувачів онлайн, кодів капчі, різних прапорів, саджестів пошукових запитів;
- СУБД для невеликих додатків - скорочувань посилань, іміджбордів, можливо навіть блогів;
- Роль «словника» у шардингу, тобто сервер, який знає, які шарди на яких серверах шукати;
- Сховище проміжних результатів обчислень під час обробки великих обсягів даних;
Також за юзкейсами див. посилання один і посилання два. Якщо серед читачів є користувачі Redis, мені дуже цікаво було б дізнатися, як ви його використовуєте.
Посилання по темі
Рекомендую ознайомитись з такими матеріалами:
У цій нотатці не буде традиційної розповіді про те, як встановити та використовувати Redis, тому що там все тривіально. Як завжди, буду радий вашим доповненням та питанням.