Що таке List у Redis?
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 зберігає списки у двох форматах:
- Quicklist - основна структура: комбінація двозв'язного списку й ziplist (компактного масиву).
- Ziplist (застарілий) - використовується для дуже коротких списків.
Quicklist обирає оптимальний спосіб зберігання: якщо елементів мало - зберігаються компактно в пам'яті, якщо список росте - Redis автоматично "розпаковує" його у ефективнішу форму.
Застосування
- Черги задач між сервісами
- Зберігання стрічки повідомлень чи дій
- Реалізація undo/redo
- Тимчасові буфери логів
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.