Операции со списками
В Managed Valkey все управление списками выполняется командами Valkey. С полным списком команд Valkey вы можете ознакомиться в официальной документации Valkey.
Обратите внимание, что в Managed Valkey некоторые команды Valkey недоступны.
Получить элементы по диапазону
Заголовок раздела «Получить элементы по диапазону»Чтобы получить элементы списка по диапазону индексов, используйте команду LRANGE.
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Узнайте имя ключа с помощью итеративного обхода.
Убедитесь, что значение ключа — список. Должно вернуться значение
list.Выполните команду:
text LRANGE <имя ключа> <начало> <конец>В команде
<начало>и<конец>— индексы первого и последнего элементов диапазона, включая обе границы. Индексация начинается с0. Отрицательные индексы отсчитываются от конца:-1— последний элемент,-2— предпоследний. Диапазон0 -1охватит весь список.Команда вернет элементы диапазона в порядке их расположения в списке. Данные сохранятся. Если ключ не существует или диапазон не содержит элементов, команда вернет пустой список. Конечный индекс за пределами списка будет ограничен последним элементом.
Получить элемент по индексу
Заголовок раздела «Получить элемент по индексу»Чтобы получить элемент списка по индексу, используйте команду LINDEX.
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Узнайте имя ключа с помощью итеративного обхода.
Убедитесь, что значение ключа — список. Должно вернуться значение
list.Определите позицию элемента.
Выполните команду:
text LINDEX <имя ключа> <индекс>В команде
<индекс>— позиция элемента:0для первого,1для второго,-1для последнего,-2для предпоследнего.Команда вернет значение элемента. Если ключ не существует или индекс выходит за границы списка, команда вернет
nil. Элемент сохранится в списке.
Получить длину списка
Заголовок раздела «Получить длину списка»Чтобы получить длину списка, используйте команду LLEN.
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Узнайте имя ключа с помощью итеративного обхода.
Убедитесь, что значение ключа — список. Должно вернуться значение
list.Выполните команду:
text LLEN <имя ключа>Команда вернет количество элементов списка. Если ключ не существует, команда вернет
0.
Добавить элементы в начало или конец
Заголовок раздела «Добавить элементы в начало или конец»Чтобы добавить элементы в список, используйте одну из команд:
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Убедитесь, что значение ключа — список. Должно вернуться значение
list.Выполните нужную команду:
- LPUSH
- RPUSH
text LPUSH <имя ключа> <элемент 1> [<элемент 2> ...]При добавлении нескольких элементов, они поместятся в начало по очереди. Последний аргумент окажется первым элементом списка. Например, после
LPUSH <имя ключа> a b cв начале окажутсяc,b,a.Команда добавит элементы и вернет длину списка после операции. Если ключ не существует, команда создаст список.
Извлечь элементы из начала или конца
Заголовок раздела «Извлечь элементы из начала или конца»Чтобы извлечь и удалить элементы списка, используйте одну из команд:
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Узнайте имя ключа с помощью итеративного обхода.
Убедитесь, что значение ключа — список. Должно вернуться значение
list.Выполните нужную команду:
- LPOP
- RPOP
text LPOP <имя ключа> [<количество>]В командах
<количество>— неотрицательное целое число элементов для извлечения. Если количество не указано, команда извлечет один элемент и вернет его значение. Если количество указано, команда вернет список извлеченных элементов, даже при количестве1.Команда удалит и вернет не более указанного числа элементов. Для существующего списка при количестве
0вернется пустой список. Если ключ не существует, вернетсяnil. После извлечения последнего элемента ключ списка будет удален. При извлечении из конца элементы вернутся в порядке от последнего к первому.
Изменить элемент по индексу
Заголовок раздела «Изменить элемент по индексу»Чтобы изменить элемент списка по индексу, используйте команду LSET.
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Узнайте имя ключа с помощью итеративного обхода.
Убедитесь, что значение ключа — список. Должно вернуться значение
list.Определите позицию элемента.
Выполните команду:
text LSET <имя ключа> <индекс> <новое значение>В команде
<индекс>— позиция элемента. Правила индексации описаны в инструкции по получению элемента.Команда заменит значение элемента и вернет
OK. Длина списка сохранится. Если ключ не существует или индекс выходит за границы списка, команда вернет ошибку.
Вставить элемент до или после другого
Заголовок раздела «Вставить элемент до или после другого»Чтобы вставить элемент до или после другого элемента списка, используйте команду LINSERT.
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Узнайте имя ключа с помощью итеративного обхода.
Убедитесь, что значение ключа — список. Должно вернуться значение
list.Узнайте значение элемента.
Выполните нужную команду:
- Вставить элемент до другого
- Вставить элемент после другого
text LINSERT <имя ключа> BEFORE <опорное значение> <новый элемент>В командах
<опорное значение>— значение элемента, относительно которого нужно выполнить вставку. При повторении опорного значения будет использовано первое совпадение от начала списка.Команда вставит элемент и вернет новую длину списка. Если ключ не существует, команда вернет
0. Если опорное значение не найдено, команда вернет-1.
Обрезать список
Заголовок раздела «Обрезать список»Чтобы оставить в списке только элементы указанного диапазона, используйте команду LTRIM.
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Узнайте имя ключа с помощью итеративного обхода.
Убедитесь, что значение ключа — список. Должно вернуться значение
list.Выполните команду:
text LTRIM <имя ключа> <начало> <конец>В команде
<начало>и<конец>— индексы границ сохраняемого диапазона. Обе границы будут включены. Индексация начинается с0. Отрицательные индексы отсчитываются от конца:-1— последний элемент,-2— предпоследний. Например, диапазон0 9сохранит не более первых десяти элементов.Команда удалит элементы вне диапазона и вернет
OK. Если начало диапазона окажется после конца списка или после конца диапазона, ключ списка будет удален. Конечный индекс за пределами списка будет ограничен последним элементом. Если ключ не существует, команда также вернетOK.
Переместить элемент между списками
Заголовок раздела «Переместить элемент между списками»Чтобы переместить элемент между списками, используйте одну из команд:
- RPOPLPUSH — переместить последний элемент исходного списка в начало целевого;
- LMOVE — выбрать сторону извлечения и сторону добавления.
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Узнайте имя исходного ключа с помощью итеративного обхода.
Узнайте имя существующего целевого ключа с помощью итеративного обхода.
Выберите имя для нового целевого ключа и убедитесь, что оно не занято.
Убедитесь, что значение ключа — список. Должно вернуться значение
list.Выполните нужную команду:
- RPOPLPUSH
- LMOVE
text RPOPLPUSH <имя исходного ключа> <имя целевого ключа>Команда за одну операцию удалит элемент из исходного списка, добавит его в целевой и вернет значение элемента. Если целевой ключ отсутствует, при переносе будет создан список. Если исходный ключ отсутствует, команда вернет
nil. При разных ключах после переноса последнего элемента исходный ключ будет удален. Если указать один и тот же ключ, перемещение произойдет внутри списка.
Извлечь элементы из списка с блокировкой
Заголовок раздела «Извлечь элементы из списка с блокировкой»Чтобы извлечь элемент списка с ожиданием его появления, используйте одну из команд:
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Узнайте имя ключа с помощью итеративного обхода.
Убедитесь, что значение ключа — список. Должно вернуться значение
list.Выполните нужную команду:
- BLPOP
- BRPOP
text BLPOP <имя ключа 1> [<имя ключа 2> ...] <таймаут>В командах
<таймаут>— неотрицательное время ожидания в секундах. Значение0задаст ожидание без ограничения времени со стороны команды.Если при вызове есть непустые списки, команда извлечет элемент из первого из них в порядке указания ключей. В ответе вернутся имя ключа и значение удаленного элемента. Если все списки отсутствуют, соединение будет ожидать, пока элемент добавится другим клиентом. При истечении таймаута без появления элемента вернется
nil. Ожидание заблокирует текущее соединение, но другие клиенты смогут выполнять команды. После извлечения последнего элемента ключ списка будет удален.
Удалить элементы
Заголовок раздела «Удалить элементы»Чтобы удалить элементы списка по значению, используйте команду LREM.
Подключитесь к кластеру.
Переключитесь на нужную базу данных.
Узнайте имя ключа с помощью итеративного обхода.
Убедитесь, что значение ключа — список. Должно вернуться значение
list.Узнайте значение элемента.
Выполните команду:
text LREM <имя ключа> <количество> <значение>В команде
<значение>— значение удаляемых элементов. Параметр<количество>задает число совпадений и направление поиска:- Положительное число — удалить не более указанного числа совпадений от начала к концу.
- Отрицательное число — удалить не более числа совпадений, равного модулю значения, от конца к началу.
0— удалить все совпадения.
Команда вернет количество удаленных элементов. Если ключ не существует или совпадений нет, команда вернет
0. После удаления последнего элемента ключ списка будет удален.