Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке List у Redis?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)List у Redis - впорядкована колекція рядкових значень, реалізована як двостороння черга (двозв'язний список): елементи зберігаються в порядку додавання, однакові значення допускаються, а додавати чи забирати елементи можна з обох боків через `LPUSH`/`RPUSH` і `LPOP`/`RPOP`. **Ключове:** підходить для реалізації черг (FIFO), стеків (LIFO), журналів дій і тимчасових буферів; блокуючі версії `BLPOP`/`BRPOP` чекають появи елемента, що зручно для асинхронних черг.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**List** у Redis - це **впорядкована колекція рядкових значень**, реалізована як **двостороння черга (двозв'язний список)**. Кожен елемент - це Redis String, а порядок вставки зберігається. ### Основні властивості - **Елементи зберігаються в порядку додавання.** - Можна додавати й забирати елементи **з обох боків** - як з початку, так і з кінця. - **Однакові значення допускаються** (це не Set). - Підходить для реалізації **черг, стеків, журналів, історій дій** і тимчасових буферів. ### Приклад ```bash LPUSH tasks "надіслати звіт" RPUSH tasks "дзвінок клієнту" LRANGE tasks 0 -1 ``` Результат: ```javascript 1) "дзвінок клієнту" 2) "надіслати звіт" ``` `LPUSH` додає на початок, `RPUSH` - у кінець. ### Основні команди | Команда | Опис | |---|---| | `LPUSH key value [value ...]` | додати елемент(и) на **початок** списку | | `RPUSH key value [value ...]` | додати елемент(и) у **кінець** списку | | `LPOP key` | видалити й повернути елемент **з початку** | | `RPOP key` | видалити й повернути елемент **з кінця** | | `LRANGE key start stop` | отримати діапазон елементів | | `LLEN key` | дізнатися довжину списку | | `LINDEX key index` | отримати елемент за індексом | | `LREM key count value` | видалити елемент за значенням | | `LTRIM key start stop` | обрізати список до діапазону | ### Приклад черги ```bash RPUSH queue "задача1" RPUSH queue "задача2" LPOP queue ``` Результат: ```javascript "задача1" ``` Лишилася `"задача2"`. Так реалізується **черга FIFO (first in - first out)**. ### Приклад стека ```bash LPUSH stack "item1" LPUSH stack "item2" LPOP stack ``` Результат: ```javascript "item2" ``` Так працює **стек LIFO (last in - first out)**. ### Додаткові можливості - Команди `BLPOP` і `BRPOP` - **блокуючі версії**: чекають, поки з'явиться елемент (зручно для асинхронних черг). - `LPUSHX` і `RPUSHX` - додають елемент **лише якщо список уже існує**. - `LSET` дозволяє змінити елемент за індексом. ### Внутрішня будова Redis зберігає списки у двох форматах: 1. **Quicklist** - основна структура: комбінація двозв'язного списку й ziplist (компактного масиву). 2. **Ziplist (застарілий)** - використовується для дуже коротких списків. Quicklist обирає оптимальний спосіб зберігання: якщо елементів мало - зберігаються компактно в пам'яті, якщо список росте - Redis автоматично "розпаковує" його у ефективнішу форму. ### Застосування - Черги задач між сервісами - Зберігання стрічки повідомлень чи дій - Реалізація undo/redo - Тимчасові буфери логівДля рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.