Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке database index у Redis?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Database index у Redis - номер логічної бази даних усередині одного екземпляра Redis: не має жодного стосунку до індексів у SQL (пошук за полями), це просто система розділення ключів на незалежні логічні простори імен, за замовчуванням 16 баз (db0-db15), між якими перемикаються командою `SELECT <index>`. **Ключове:** кожна база - повністю ізольована хеш-таблиця зі своїм TTL/LRU; у продакшені зазвичай використовують одну базу (db0) і розділяють дані через префікси ключів, бо Redis Cluster підтримує лише db0.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняУ Redis **database index (індекс бази даних)** - це **номер логічної бази даних** усередині одного екземпляра Redis. Він **не має стосунку до індексів у SQL** (пошук за полями) - це **проста система розділення ключів на незалежні логічні простори імен**. ### 1. Що це означає Redis-сервер може містити **кілька баз даних**, кожна з яких - це окрема хеш-таблиця (dictionary), що зберігає свої пари `ключ → значення`. Кожній базі присвоюється **індекс** - ціле число, починаючи з **0**. За замовчуванням: ```javascript db0, db1, db2, ... ``` Кількість баз задається параметром у конфігурації: ```bash databases 16 ``` (за замовчуванням 16 баз: від `db0` до `db15`). ### 2. Перемикання між базами Redis не підтримує кілька баз в одному запиті. Клієнт підключається до сервера і обирає потрібну базу командою: ```bash SELECT <index> ``` Приклад: ```bash SELECT 0 SET key "value" SELECT 1 GET key ``` Результат: `GET key` поверне `(nil)`, тому що ключ був записаний в іншу базу (`db0` і `db1` незалежні). ### 3. Як Redis зберігає ці бази У пам'яті Redis кожна база даних (`db`) представлена окремою структурою: ```javascript dict *dict → сховище ключів і значень dict *expires → час життя ключів ``` Усі бази лежать у масиві: ```javascript server.db[0], server.db[1], ..., server.db[N-1] ``` Це повністю ізольовані хеш-таблиці. Видалення, TTL, LRU та інші механізми працюють окремо для кожної бази. ### 4. Важливі особливості - Бази не мають імен - лише числові індекси (`0`, `1`, `2`, …). - Бази **не мають схеми** - усі вони зберігають дані однаково. - **Немає ізоляції за правами доступу**: це не "багатокористувацькі бази", а просто логічні розділи. - При реплікації, збереженні (RDB/AOF) і очищенні (`FLUSHALL`) дані всіх баз обробляються разом. ### 5. Очищення й перегляд Очистити конкретну базу: ```bash FLUSHDB ``` Очистити всі бази одразу: ```bash FLUSHALL ``` Переглянути активну базу: ```bash CLIENT INFO ``` (у полі `db=N` вказано, з якою базою працює клієнт). ### 6. Застосування - Розділення даних між застосунками чи оточеннями (наприклад, тест / прод). - Ізоляція тимчасових і постійних даних. - Зберігання різних типів кешу в різних базах. Однак у продакшені зазвичай використовують **одну базу (db0)** і розділяють дані через **префікси ключів** (`user:1`, `session:xyz`, `order:42`), тому що кластери Redis підтримують **лише одну базу** (`db0`). ### 7. Підсумок **Database index у Redis** - це: - просто **номер логічної бази**, - усередині одного екземпляра Redis, - що вказує, у якій хеш-таблиці зберігаються ключі. Тобто: ```javascript db0 → dict ключів db1 → свій dict ключів db2 → свій dict ключів ``` Жодного стосунку до пошукових індексів SQL це не має - це **логічні розділи пам'яті Redis**, а не структури пришвидшеного пошуку.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.