Skip to main content

Що таке 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 зберігає списки у двох форматах:

  1. Quicklist - основна структура: комбінація двозв'язного списку й ziplist (компактного масиву).
  2. Ziplist (застарілий) - використовується для дуже коротких списків.

Quicklist обирає оптимальний спосіб зберігання: якщо елементів мало - зберігаються компактно в пам'яті, якщо список росте - Redis автоматично "розпаковує" його у ефективнішу форму.

Застосування

  • Черги задач між сервісами
  • Зберігання стрічки повідомлень чи дій
  • Реалізація undo/redo
  • Тимчасові буфери логів

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.