티스토리 뷰

List 관련 명령어 예제

 

LPUSH, RPUSH, LRANGE

설명(LPUSH) : 지정된 모든 값을 키에 저장된 목록의 처음에 넣습니다. 키가 없으면 조작을 수행하기 전에 키가 빈 목록으로 작성

설명(RPUSH) : 지정된 모든 값을 키에 저장된 목록의 끝에 넣습니다. 키가 없으면 조작을 수행하기 전에 키가 빈 목록으로 작성

설명(LRANGE) : list형식으로 저장된 키의 값을 개수를 인덱스를 지정하여 가져올 수 있음. 음수의 경우일 경우는 마지막 값을 의미

-1 은 마지막 값, -2 마지막에서 2번째 값, -3 마지막에서 3번째 값

 

시간복잡도 : O(1)

redis-cli > LPUSH key value [value ...]

redis-cli > RPUSH key value [value ...]

redis-cli > LRANGE key start stop

 

 redis > RPUSH list 5 6 7 8 9
 (integer) 5
 redis > LPUSlist 1 2 3 4 5
 (integer) 10
 redis > LARNGE list 0 9
 1) "5"
 2) "4"
 3) "3"
 4) "2"
 5) "1"
 6) "5"
 7) "6"
 8) "7"
 9) "8"
 10) "9"

 redis > LRANGE list -4 -3
 1) "6"
 2) "7"


 

 

- LPOP, RPOP

설명(LPOP) : 리스트 키에 저장된 목록의 첫 번째 요소를 제거하고 반환

설명(RPOP) : 리스트 키에 저장된 목록의 마지막 요소를 제거하고 반환

시간복잡도 : O(1)

redis-cli > LPOP key

redis-cli > RPOP key

 

 redis > RPUSH list 5 6 7 8 9
 (integer) 5
 redis > LPUSH list 1 2 3 4 5
 (integer) 10
 redis > LPOP list
 "5"
 redis > RPOP list
 "9"

 

 

- LPUSHX, RPUSHX

설명(LPUSHX) : 키가 이미 있고 목록을 보유하고 있는 경우에만 목록의 첫 번째에 값을 삽입합니다.

설명(RPUSHX) : 키가 이미 있고 목록을 보유하고 있는 경우에만 목록의 마지막에 값을 삽입합니다.

시간복잡도 : O(1)

redis-cli > LPOP key

redis-cli > RPOP key

 

 redis > RPUSHX list 1
 (integer) 0
 redis > RPUSH list 1 2 3 4 5
 (integer) 5
 redis > RPUSHX list 3
 (integer) 6
 redis > LRANGE list 0 -1 
 1) "1"
 2) "2"
 3) "3"
 4) "4"
 5) "5"
 6) "3"


 

 

- LINDEX

설명(LINDEX) : 리스트 키에 지정된 인덱스 요소를 반환합니다. 0은 첫 번째, 1은 두 번쨰, -1 뒤에서 첫번째, -2 뒤에서 두번째

시간복잡도 : O(N)

redis-cli > LINDEX key index

 

 redis > LPUSH list "World"
 (integer) 1
 redis > LPUSH list "Hello"
 (integer) 2
 redis > LINDEX list 0
 "Hello"
 redis > LINDEX list -1 
 "World"

 

 

- LSET, LREM

설명(LSET) : 리스트에 특정 인덱스 요소에 값을 설정합니다.

설명(LREM) : 리스트에 특정 인덱스 요소의 값을 삭제합니다.

시간복잡도 : O(N)

redis-cli > LSET key index value

 

 redis > RPUSH list 1 2 3 4 5
 (integer) 5
 redis > LSET list 3 5
 "OK"
 redis > LRANGE list 0 -1
 1) "1"
 2) "2"
 3) "3"
 4) "5"
 5) "5"

 redis > LINDEX list -1 
 "World"

 

 

 

- LLEN

설명(LLEN) : 키에 저장된 목록의 길이를 반환. 키에 값이 없으면 0을 리턴. 목록형이 아니면 에러를 반환

시간복잡도 : O(1)

redis-cli > LLEN key

 

 redis > LPUSH list "World"
 (integer) 1
 redis > LPUSH list "Hello"
 (integer) 2
 redis > LLEN list
 (integer) 2

 

 

- LINSERT

설명(LINSERT) : 키에 저장된 목록에 참조 값 피벗 전후에 값을 삽입한다. 피벗값이 중복이면 앞에 있는 값을 우선적으로 선택한다.

시간복잡도 : O(N)

redis-cli > LINSERT key BEFORE | AFTER pivot value

 

 redis > LPUSH list 1 2 3 4 5 6 7 8 9 10
 (integer) 10
 redis > LINSERT list before 5 4
 (integer) 11
 redis > LINSERT list after 5 5
 (integer) 12
 redis > LRANGE list 0 -1
 1) "1"
 2) "2"
 3) "3"
 4) "4"
 5) "4"
 6) "5"
 7) "5"
 8) "6"
 9) "7"
 10) "8"
 11) "9"
 12) "10"


 

 

- LTRIM

설명(LTRIM) : 키의 지정된 요소만큼 범위를 잘라냅니다.

시간복잡도 : O(N)

redis-cli > LTRIM key start stop

 

 redis > RPUSH list 1 2 3 4 5 6 7 8 9 10
 (integer) 10
 redis > LTRIM list 5 -1
 "OK"
 redis > LRANGE list 0 -1
 1) "6"
 2) "7"
 3) "8"
 4) "9"
 5) "10"


 

 

 

- RPOPLPUSH

설명(RPOPLPUSH) : 마지막 요소를 반환하고 제거하고 새로운 키 대상 헤드에 푸쉬(저장)합니다.

시간복잡도 : O(1)

redis-cli > RPOPLPUSH source destination

 

 redis > RPUSH list 1 2 3
 (integer) 3
 redis > RPUSH list1 4 5 6
 "OK"
 redis > RPOPLPUSH list list1
 "3"
 redis > LRANGE list 0 -1
 1) "1"
 2) "2"

 redis > LRANGE list1 0 -1
 1) "3"
 2) "4"
 3) "5"
 4) "6"


 

 

 

- BLPOP, BRPOP

설명(BLPOP) : 주어진 키 값에서 헤드에 POP을 할 요소가 없으면 연결을 차단한다. 값이 들어와서 POP할 때까지 특정 timeout 동안 차단된다. 값이 들어와서 pop이 되면 차단이 풀린다.

설명(BRPOP) : 주어진 키값에서 마지막 POP을 할 요소가 없으면 연결을 차단한다. 값이 들어와서 POP할 때까지 특정 timeout 동안 차단된다. 값이 들어와서 pop이 되면 차단이 풀린다.

timeout은 초 단위 이며 0으로 하면 무한이다.

시간복잡도 : O(1)

redis-cli > BLPOP key [key ...] timeout

redis-cli > BRPOP key [key ...] timeout

 

 redis > BLPOP list1 list2 list3 0
/* 
    아무런 반응이 없음 연결이 차단 됌 
    다른 쉘 창을 켜서 RPUSH list1 hello 명령어를 입력하면

    list1 -> list2 -> list3 순으로 순차적으로 POP할 요소를 찾음
*/

 1) "list1"
 2) "hello"

/* 
    list1 에서 값을 꺼내고 연결이 다시 활성화 됌 
*/


 

 

 

- BRPOPLPUSH

설명(BRPOPLPUSH) : RPOPLPUSH의 차단변형이다. source에 POP을 할 수 있는 값이 있으면 RPOPLPUSH와 똑같이 작동한다.

시간복잡도 : O(1)

redis-cli > BRPOPLPUSH source destination timeout

 

 redis > BRPOPLPUSH list1 list2 0
/* 
    아무런 반응이 없음 연결이 차단 됌 
    다른 쉘 창을 켜서 RPUSH list1 hello 명령어를 입력하면

    list1 에서 값을 POP 한 후 list2에 저장
*/