소개
이 랩에서는 기본적인 Redis 리스트 연산을 탐구합니다. LTRIM, LINSERT, LPOP, RPOP, 그리고 BLPOP와 같은 명령어를 사용하여 리스트 데이터를 관리하고 조작하는 방법을 배우게 됩니다.
구체적으로, LTRIM을 사용하여 리스트를 특정 범위로 자르고, LINSERT를 사용하여 기존 요소의 앞이나 뒤에 요소를 삽입하며, LPOP과 RPOP를 각각 사용하여 리스트의 시작과 끝에서 요소를 제거하고, BLPOP를 사용하여 팝할 요소가 나올 때까지 블로킹하는 것을 연습할 것입니다. 이러한 연산은 Redis 리스트에 저장된 데이터를 효율적으로 관리하는 데 필수적입니다.
LTRIM 으로 리스트 자르기
이 단계에서는 LTRIM 명령어를 사용하여 Redis 리스트를 자르는 방법을 배우게 됩니다. LTRIM을 사용하면 리스트 내에서 요소의 범위를 지정하여 해당 범위를 벗어나는 모든 요소를 효과적으로 제거할 수 있습니다. 이는 리스트 크기를 관리하고 데이터의 특정 부분에 집중하는 데 유용합니다.
먼저, 터미널에서 redis-cli 명령어를 사용하여 Redis 서버에 연결합니다.
redis-cli
이제 mylist라는 리스트를 생성하고 몇 가지 값으로 채워보겠습니다. redis-cli 내에서 다음 명령을 실행합니다.
RPUSH mylist "one" "two" "three" "four" "five"
다음과 같은 출력을 볼 수 있습니다.
(integer) 5
이는 다섯 개의 요소가 리스트에 추가되었음을 나타냅니다.
이제 LTRIM을 사용하여 인덱스 1 부터 3 까지의 요소만 유지해 보겠습니다 (포함). Redis 리스트 인덱스는 0 부터 시작한다는 것을 기억하세요. 다음 명령을 실행합니다.
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" 요소는 제거되었습니다.
마지막으로, exit를 입력하고 Enter 키를 눌러 redis-cli를 종료합니다. 이렇게 하면 명령이 기록됩니다.
exit
LTRIM은 Redis 리스트의 크기와 내용을 관리하는 강력한 도구입니다. 원하는 범위를 지정하여 원치 않는 요소를 효율적으로 제거하고 가장 중요한 데이터에 집중할 수 있습니다.
LINSERT 로 요소 삽입
이 단계에서는 LINSERT 명령어를 사용하여 Redis 리스트에 요소를 삽입하는 방법을 배우게 됩니다. LINSERT를 사용하면 리스트의 기존 요소 앞이나 뒤에 새 요소를 삽입할 수 있습니다. 이는 요소의 순서를 유지하고 특정 위치에 새 항목을 추가하는 데 유용합니다.
이전 단계에서 계속 진행하면 "two", "three", "four" 요소를 가진 mylist라는 리스트가 있어야 합니다.
redis-cli 명령어를 사용하여 Redis 서버에 연결합니다.
redis-cli
이제 리스트에서 "two" 요소 앞에 "one" 요소를 삽입해 보겠습니다. LINSERT와 함께 BEFORE 옵션을 사용합니다. 다음 명령을 실행합니다.
LINSERT mylist BEFORE "two" "one"
다음과 같은 출력을 볼 수 있습니다.
(integer) 4
이는 리스트에 이제 4 개의 요소가 있음을 나타냅니다.
결과를 확인하기 위해 LRANGE를 사용하여 전체 리스트를 검색해 보겠습니다. 다음 명령을 실행합니다.
LRANGE mylist 0 -1
다음과 같은 출력을 볼 수 있습니다.
1) "one"
2) "two"
3) "three"
4) "four"
보시다시피 "one" 요소가 "two" 앞에 삽입되었습니다.
다음으로, 리스트에서 "four" 요소 뒤에 "five" 요소를 삽입해 보겠습니다. LINSERT와 함께 AFTER 옵션을 사용합니다. 다음 명령을 실행합니다.
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" 뒤에 삽입되었습니다.
마지막으로, exit를 입력하고 Enter 키를 눌러 redis-cli를 종료합니다. 이렇게 하면 명령이 기록됩니다.
exit
LINSERT는 Redis 리스트에 새 요소를 추가할 위치를 정밀하게 제어하여 원하는 데이터의 순서와 구조를 유지할 수 있도록 합니다.
LPOP 및 RPOP 로 요소 제거
이 단계에서는 LPOP 및 RPOP 명령어를 사용하여 Redis 리스트에서 요소를 제거하고 검색하는 방법을 배우게 됩니다. LPOP는 리스트의 첫 번째 요소 (가장 왼쪽) 를 제거하고 반환하는 반면, RPOP는 리스트의 마지막 요소 (가장 오른쪽) 를 제거하고 반환합니다. 이러한 명령어는 Redis 리스트를 사용하여 큐 (queue) 또는 스택 (stack) 과 유사한 동작을 구현하는 데 유용합니다.
이전 단계에서 계속 진행하면 "one", "two", "three", "four", "five" 요소를 가진 mylist라는 리스트가 있어야 합니다.
redis-cli 명령어를 사용하여 Redis 서버에 연결합니다.
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 리스트를 삭제하고 exit를 입력하고 Enter 키를 눌러 redis-cli를 종료합니다. 이렇게 하면 명령이 기록됩니다.
DEL mylist
exit
LPOP 및 RPOP는 Redis 리스트를 큐 또는 스택으로 관리하기 위한 기본적인 명령어입니다. 리스트의 양쪽 끝에서 요소를 제거하고 검색하는 간단하고 효율적인 방법을 제공합니다.
BLPOP 를 사용한 블로킹 및 팝
이 단계에서는 LPOP의 블로킹 버전인 BLPOP 명령어를 사용하는 방법을 배우게 됩니다. BLPOP를 사용하면 클라이언트가 요소를 꺼내기 전에 리스트에서 요소를 사용할 수 있을 때까지 대기 (블로킹) 할 수 있습니다. 이는 소비자가 새 항목이 추가될 때까지 기다려야 하는 안정적인 메시지 큐 또는 작업 큐를 구축하는 데 특히 유용합니다.
이 단계를 위해 두 개의 터미널 창을 열어야 합니다. 두 터미널 모두에서 redis-cli 명령어를 사용하여 Redis 서버에 연결합니다.
redis-cli
첫 번째 터미널을 Redis 에 연결된 상태로 유지합니다. 두 번째 터미널에서는 블로킹 팝 명령을 실행합니다.
먼저, 이전 단계에서 mylist 리스트가 삭제되었는지 확인합니다. 그렇지 않은 경우 다음 명령을 실행합니다.
DEL mylist
두 번째 터미널에서 다음 명령을 실행합니다.
BLPOP mylist 100
이 명령어는 리스트 mylist에서 요소를 사용할 수 있을 때까지 최대 100 초 동안 블로킹됩니다. 100 초 이내에 요소가 추가되지 않으면 명령어가 시간 초과되어 nil을 반환합니다.
이제 첫 번째 터미널로 다시 전환합니다. mylist 리스트에 요소를 추가해 보겠습니다. 다음 명령을 실행합니다.
RPUSH mylist "hello"
첫 번째 터미널에서 RPUSH 명령을 실행한 직후, 두 번째 터미널에서 BLPOP 명령이 다음 출력을 반환하는 것을 볼 수 있습니다.
1) "mylist"
2) "hello"

이는 BLPOP 명령이 mylist 리스트에서 "hello" 요소를 성공적으로 꺼냈음을 나타냅니다. 반환된 배열의 첫 번째 요소는 리스트의 키이고, 두 번째 요소는 꺼낸 값입니다.
요소를 충분히 빨리 추가하지 않은 경우, 두 번째 터미널의 BLPOP 명령이 시간 초과되어 nil을 반환했을 수 있습니다. 이 경우, 두 번째 터미널에서 BLPOP 명령을 다시 실행한 다음 첫 번째 터미널에서 리스트에 요소를 빠르게 추가하십시오.
이제 여러 리스트로 BLPOP를 시도해 보겠습니다. 두 번째 터미널에서 다음 명령을 실행합니다.
BLPOP mylist anotherlist 100
이 명령어는 mylist 또는 anotherlist에서 요소를 사용할 수 있을 때까지 블로킹됩니다.
첫 번째 터미널로 다시 전환하여 anotherlist에 요소를 추가합니다. 다음 명령을 실행합니다.
RPUSH anotherlist "world"
두 번째 터미널에서 BLPOP 명령이 다음 출력을 반환하는 것을 볼 수 있습니다.
1) "anotherlist"
2) "world"

이는 BLPOP가 여러 리스트에서 요소를 기다릴 수 있으며 요소가 꺼내진 리스트를 반환함을 보여줍니다.
마지막으로, exit를 입력하고 Enter 키를 눌러 두 터미널 모두에서 redis-cli를 종료합니다. 이렇게 하면 명령이 기록됩니다.
exit
BLPOP는 비동기 통신 및 작업 처리에 의존하는 강력하고 확장 가능한 애플리케이션을 구축하기 위한 중요한 명령어입니다. 이를 통해 소비자는 Redis 서버를 지속적으로 폴링하지 않고도 새 데이터를 효율적으로 기다릴 수 있습니다.
요약
이 랩에서는 기본적인 Redis 리스트 연산을 탐구했습니다. LTRIM, LINSERT, LPOP, RPOP, BLPOP와 같은 명령어를 사용하여 리스트 데이터를 관리하고 조작하는 방법을 배웠습니다.
LTRIM을 사용하여 리스트를 특정 범위로 자르고, LINSERT를 사용하여 기존 요소 앞이나 뒤에 요소를 삽입하고, LPOP 및 RPOP를 사용하여 각각 리스트의 시작과 끝에서 요소를 제거하고, BLPOP를 사용하여 요소를 꺼낼 수 있을 때까지 블로킹하는 연습을 했습니다. 이러한 연산은 Redis 리스트에 저장된 데이터를 효율적으로 관리하는 데 필수적입니다.


