В этой лабораторной работе вы изучите основные операции со списками Redis. Вы узнаете, как управлять данными списков и манипулировать ими с помощью команд, таких как LTRIM, LINSERT, LPOP, RPOP и BLPOP.
В частности, вы попрактикуетесь в обрезке списков до определенных диапазонов с помощью LTRIM, вставке элементов до или после существующих элементов с помощью LINSERT, удалении элементов из начала и конца списков с помощью LPOP и RPOP соответственно, а также блокировке до тех пор, пока элемент не станет доступен для извлечения с помощью BLPOP. Эти операции необходимы для эффективного управления данными, хранящимися в списках Redis.
Обрезка списка с помощью LTRIM
В этом шаге вы узнаете, как обрезать список Redis с помощью команды LTRIM. LTRIM позволяет указать диапазон элементов в списке, эффективно удаляя все элементы за пределами этого диапазона. Это полезно для управления размером списка и фокусировки на определенных частях ваших данных.
Сначала подключитесь к серверу Redis, используя команду redis-cli в вашем терминале:
redis-cli
Теперь давайте создадим список с именем mylist и заполним его некоторыми значениями. Выполните следующую команду в redis-cli:
RPUSH mylist "one" "two" "three" "four" "five"
Вы должны увидеть следующий вывод:
(integer) 5
Это указывает на то, что в список добавлено пять элементов.
Теперь давайте используем LTRIM, чтобы сохранить только элементы с индекса 1 по индекс 3 (включительно). Помните, что индексы списков Redis начинаются с нуля. Выполните следующую команду:
LTRIM mylist 1 3
Вывод будет:
OK
Это означает, что операция LTRIM прошла успешно.
Чтобы проверить результат, давайте получим весь список с помощью LRANGE. Выполните следующую команду:
LRANGE mylist 0 -1
Вы должны увидеть следующий вывод:
1) "two"
2) "three"
3) "four"
Как видите, в списке остались только элементы с индексами 1, 2 и 3 ("two", "three" и "four"). Элементы "one" и "five" были удалены.
Наконец, выйдите из redis-cli, набрав exit и нажав Enter. Это гарантирует, что ваши команды будут зарегистрированы.
exit
LTRIM — это мощный инструмент для управления размером и содержимым ваших списков Redis. Указав желаемый диапазон, вы можете эффективно удалять ненужные элементы и сосредоточиться на наиболее важных данных.
Вставка элементов с помощью LINSERT
В этом шаге вы узнаете, как вставлять элементы в список Redis с помощью команды LINSERT. LINSERT позволяет вставить новый элемент либо до, либо после существующего элемента в списке. Это полезно для поддержания порядка элементов и добавления новых элементов в определенных позициях.
Продолжая с предыдущего шага, у нас должен быть список с именем mylist со следующими элементами: "two", "three" и "four".
Подключитесь к серверу Redis, используя команду redis-cli:
redis-cli
Теперь давайте вставим элемент "one" перед элементом "two" в списке. Мы используем опцию BEFORE с LINSERT. Выполните следующую команду:
LINSERT mylist BEFORE "two" "one"
Вы должны увидеть следующий вывод:
(integer) 4
Это указывает на то, что теперь в списке 4 элемента.
Чтобы проверить результат, давайте получим весь список с помощью LRANGE. Выполните следующую команду:
LRANGE mylist 0 -1
Вы должны увидеть следующий вывод:
1) "one"
2) "two"
3) "three"
4) "four"
Как видите, элемент "one" был вставлен перед "two".
Далее, давайте вставим элемент "five" после элемента "four" в списке. Мы используем опцию AFTER с LINSERT. Выполните следующую команду:
LINSERT mylist AFTER "four" "five"
Вывод будет:
(integer) 5
Это означает, что операция LINSERT прошла успешно, и теперь в списке 5 элементов.
Давайте снова получим весь список с помощью LRANGE. Выполните следующую команду:
LRANGE mylist 0 -1
Вы должны увидеть следующий вывод:
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
Как видите, элемент "five" был вставлен после "four".
Наконец, выйдите из redis-cli, набрав exit и нажав Enter. Это гарантирует, что ваши команды будут зарегистрированы.
exit
LINSERT обеспечивает точный контроль над тем, где добавляются новые элементы в ваши списки Redis, позволяя поддерживать желаемый порядок и структуру ваших данных.
Удаление элементов с помощью LPOP и RPOP
В этом шаге вы узнаете, как удалять и извлекать элементы из списка Redis с помощью команд LPOP и RPOP. LPOP удаляет и возвращает первый элемент (самый левый) списка, а RPOP удаляет и возвращает последний элемент (самый правый) списка. Эти команды полезны для реализации поведения, подобного очереди (queue-like) или стеку (stack-like), со списками Redis.
Продолжая с предыдущего шага, у нас должен быть список с именем mylist со следующими элементами: "one", "two", "three", "four" и "five".
Подключитесь к серверу Redis с помощью команды redis-cli:
redis-cli
Теперь давайте используем LPOP, чтобы удалить и получить первый элемент списка. Выполните следующую команду:
LPOP mylist
Вы должны увидеть следующий вывод:
"one"
Это указывает на то, что элемент "one" был удален из списка и возвращен.
Чтобы проверить результат, давайте получим оставшиеся элементы с помощью LRANGE. Выполните следующую команду:
LRANGE mylist 0 -1
Вы должны увидеть следующий вывод:
1) "two"
2) "three"
3) "four"
4) "five"
Как видите, элемента "one" больше нет в списке.
Далее давайте используем RPOP, чтобы удалить и получить последний элемент списка. Выполните следующую команду:
RPOP mylist
Вывод будет:
"five"
Это означает, что элемент "five" был удален из списка и возвращен.
Давайте снова получим оставшиеся элементы с помощью LRANGE. Выполните следующую команду:
LRANGE mylist 0 -1
Вы должны увидеть следующий вывод:
1) "two"
2) "three"
3) "four"
Как видите, элемента "five" больше нет в списке.
Наконец, удалите список mylist и выйдите из redis-cli, набрав exit и нажав Enter. Это гарантирует, что ваши команды будут зарегистрированы.
DEL mylist
exit
LPOP и RPOP — это фундаментальные команды для управления списками Redis как очередями или стеками. Они предоставляют простой и эффективный способ удаления и извлечения элементов с любого конца списка.
Блокировка и извлечение с помощью BLPOP
В этом шаге вы узнаете, как использовать команду BLPOP, которая является блокирующей версией команды LPOP. BLPOP позволяет клиенту ждать (блокироваться) до тех пор, пока элемент не станет доступным в списке, прежде чем пытаться его извлечь. Это особенно полезно для создания надежных очередей сообщений или очередей задач, где потребителям необходимо ждать добавления новых элементов.
Для этого шага вам нужно открыть два окна терминала. В обоих терминалах подключитесь к Redis-серверу с помощью команды redis-cli:
redis-cli
Оставьте первый терминал подключенным к Redis. Во втором терминале мы выполним команду блокирующего извлечения.
Сначала убедитесь, что список mylist удален из предыдущих шагов. Если нет, выполните следующую команду:
DEL mylist
Во втором терминале выполните следующую команду:
BLPOP mylist 100
Эта команда будет блокироваться максимум 100 секунд, ожидая, пока элемент станет доступным в списке mylist. Если в течение 100 секунд не будет добавлен ни один элемент, команда завершится по тайм-ауту и вернет nil.
Теперь переключитесь обратно в первый терминал. Давайте добавим элемент в список mylist. Выполните следующую команду:
RPUSH mylist "hello"
Сразу после выполнения команды RPUSH в первом терминале вы должны увидеть, что команда BLPOP во втором терминале возвращает следующий результат:
1) "mylist"
2) "hello"
Это указывает на то, что команда BLPOP успешно извлекла элемент "hello" из списка mylist. Первый элемент возвращенного массива - это ключ списка, а второй элемент - это извлеченное значение.
Если вы не добавили элемент достаточно быстро, команда BLPOP во втором терминале могла истечь по тайм-ауту и вернуть nil. Если это произойдет, просто повторно запустите команду BLPOP во втором терминале, а затем быстро добавьте элемент в список в первом терминале.
Теперь давайте попробуем BLPOP с несколькими списками. Во втором терминале выполните следующую команду:
BLPOP mylist anotherlist 100
Эта команда будет блокироваться, ожидая, пока элемент не станет доступным либо в mylist, либо в anotherlist.
Переключитесь обратно в первый терминал и добавьте элемент в anotherlist. Выполните следующую команду:
RPUSH anotherlist "world"
Вы должны увидеть, что команда BLPOP во втором терминале возвращает следующий результат:
1) "anotherlist"
2) "world"
Это демонстрирует, что BLPOP может ждать элементы в нескольких списках и возвращает список, из которого был извлечен элемент.
Наконец, выйдите из redis-cli в обоих терминалах, набрав exit и нажав Enter. Это гарантирует, что ваши команды будут зарегистрированы.
exit
BLPOP - это важная команда для создания надежных и масштабируемых приложений, которые полагаются на асинхронную связь и обработку задач. Она позволяет потребителям эффективно ждать новые данные, не опрашивая постоянно Redis-сервер.
Резюме
В этой лабораторной работе вы изучили основные операции со списками Redis. Вы узнали, как управлять данными списка и манипулировать ими с помощью таких команд, как LTRIM, LINSERT, LPOP, RPOP и BLPOP.
Вы практиковались в обрезке списков до определенных диапазонов с помощью LTRIM, вставке элементов до или после существующих элементов с помощью LINSERT, удалении элементов из начала и конца списков с помощью LPOP и RPOP соответственно, а также в блокировке до тех пор, пока не появится элемент для удаления с помощью BLPOP. Эти операции необходимы для эффективного управления данными, хранящимися в списках Redis.