Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Як Redis використовує пам'ять?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Redis використовує оперативну пам'ять як основне робоче сховище: усі ключі, значення та метадані живуть прямо в RAM, керовані алокатором пам'яті (зазвичай `jemalloc`), а при досягненні ліміту `maxmemory` Redis починає видаляти старі дані за обраною політикою (LRU, LFU, TTL тощо). **Ключове:** персистентність (RDB/AOF) створює лише копію з RAM на диск - основний стан завжди живе в пам'яті, а диск слугує лише резервним копіюванням, не оперативною роботою.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняRedis використовує пам'ять **як основне робоче сховище** - усі дані, ключі, структури та індекси перебувають **в оперативній пам'яті (RAM)**. Це основа його швидкості, але й джерело обмежень. Розберемо детально: ### 1. Усі дані живуть в оперативній пам'яті Redis зберігає все: ключі, значення й метадані - **прямо в RAM**. Кожен ключ - це об'єкт у пам'яті, зазвичай представлений структурами на C (dict, sds та ін.). Приклад: Якщо ти записуєш у Redis рядок `"user:1" → "Alice"`, то обидва ці значення - і ключ, і саме значення - лежать в оперативній пам'яті. *Наслідок:* операції виконуються за мікросекунди, але обсяг даних обмежений обсягом RAM. ### 2. Пам'ять керується динамічно Redis використовує **алокатор пам'яті** (зазвичай `jemalloc`), який ефективно розподіляє RAM між структурами даних. Він намагається мінімізувати фрагментацію (розпорошення пам'яті на дрібні шматки). Примітка: при довгій роботі й безлічі операцій виділення/звільнення пам'ять може фрагментуватися, через що фактичне використання RAM росте. ### 3. Обмеження пам'яті (`maxmemory`) У `redis.conf` можна задати межу: ```javascript maxmemory 2gb ``` Коли Redis досягає цього ліміту, він **починає видаляти старі дані** за обраною політикою (LRU, LFU, TTL та ін.). Приклад налаштувань: ```javascript maxmemory-policy allkeys-lru ``` - видаляти найменш використовувані ключі. *Підсумок:* Redis може "самоочищатися" як кеш, не падаючи при переповненні пам'яті. ### 4. Персистентність не впливає на оперативне сховище Коли Redis зберігає дані на диск (`dump.rdb`, `appendonly.aof`), він **створює копію з RAM**, але **основний стан все одно живе в пам'яті**. *Роль диска:* лише резервне копіювання, не оперативна робота. ### 5. Як Redis зберігає різні типи даних Різні структури займають різну кількість пам'яті: - `String` - мінімум 50-100 байт на ключ/значення. - `List` і `Set` - використовують внутрішні структури (`ziplist`, `hashtable`). - `Hash` - може бути упакований компактно за малої кількості елементів. Redis автоматично обирає оптимальну внутрішню структуру залежно від розміру даних. ### 6. Інструменти аналізу пам'яті Redis має вбудовані команди: - `INFO MEMORY` - загальна статистика пам'яті. - `MEMORY USAGE key` - скільки пам'яті займає конкретний ключ. - `MEMORY STATS` - детальний розбір (фрагментація, allocator, overhead). ### Підсумок Redis використовує **оперативну пам'ять як основне сховище даних**, динамічно керує виділенням, і при досягненні ліміту очищає дані за заданою політикою. **Головне:** - Дані в RAM = миттєвий доступ. - Диск використовується лише для резервного збереження. - Ліміт пам'яті контролюється через `maxmemory`. Redis - це, по суті, **інтелектуальний менеджер оперативної пам'яті, що працює як база даних**.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.