redis Lists

2021. 4. 11. 03:19 NoSQL/redis

개요

key 값 내에 여러 value가 존재 하는 일대다 관계 입니다.

Queue와 Statck로 사용됩니다.

 

명령어 요약

저장 : LPUSH, RPUSH, LINSERT, LPUSHX, RPUSHX

LPUSH : lpush key value  예) lpush userlist "홍길동1" "홍길동2", 왼쪽에서 리스트의 오른쪽에 데이터를 저장 합니다.

저장 후 전체 value수가 리턴됩니다.

RPUSH : rpush key value 예) rpush userlist "홍길동1" "홍길동2", 오른쪽에서 리스트의 왼쪽에 데이터를 저장 합니다.

저장 후 전체 value수가 리턴됩니다.

LINSERT : linsert key BEFORE|AFTER pivot value  예) linsert userlist after  "홍길동1" "홍길동2", "홍길동1" 앞에 "홍길동2"을 삽입 합니다.

pivot 이 존재 하지 않는 경우 입력되지 않으며, -1을 리턴 합니다.

pivot 이 여러값이 존재 하면, 첫번째 데이터를 기준으로 처리 됩니다.

LPUSHX : lpushx key value 예) lpushx userlist "홍길동3", key가 존재하는 경우에만 리스트의 왼쪽에 데이타를 삽입 합니다.

삽입을 성공하는 경우 value 전체 수가 리턴 됩니다. key가 존재하지 않는 경우 0을 리턴 합니다.

 

RPUSHX :rpushx key value 예) rpushx userlist "홍길동3", key가 존재하는 경우에만 리스트의 오른쪽에 데이타를 삽입 합니다.

삽입을 성공하는 경우 value 전체 수가 리턴 됩니다. key가 존재하지 않는 경우 0을 리턴 합니다. 존재 하지 않으면 null을 리턴 합니다.

 

 

꺼내옴 :LPOP, RPOP, BLPOP, BRPOP

LPOP : lpop key 예) lpop userlist , 리스트의 왼쪽에서 데이터를 꺼내 옵니다. 꺼내온 데이터는 삭제 됩니다.

stack (Last-in, First-out) 의 형태로 list를 사용할때 lpush 와 lpop를 사용하면 됩니다.

RPOP : rpop key 예) rpop userlist, 리스트 오른쪽에서 데이터를 꺼내 옵니다. 꺼내온 데이터는 삭제 됩니다.

queue (First-in, First-out) 의 형태로 list를 사용할때 lpush 와 rpop를 사용하면 됩니다.

BLPOP :blpop key [key ...] timeout 예) blpop userlist 5, key에서 리스트의 왼쪽에서 데이터를 꺼내 옵니다. 꺼내온 데이터는 삭제 됩니다.

만약 key에 데이터가 없다면 timeout 동안 데이터가 입력되길 기다리며, 입력되면 꺼내 옵니다. timeout는 초 단위 입니다.

key를 여러개 지정 하면, 지정한 순서대로 리스트를 확인하고 데이터가 있다면 존재하는 key에서 데이터를 하나 가져오고 종료 됩니다.

BRPOP : brpop key [key ...] timeout  예) brpop userlist 5, key에서 리스트의 오른쪽에서 데이터를 꺼내 옵니다. 꺼내온 데이터는 삭제 됩니다.

만약 key에 데이터가 없다면 timeout 동안 데이터가 입력되길 기다리며, 입력되면 꺼내 옵니다. timeout는 초 단위 입니다.

key를 여러개 지정 하면, 지정한 순서대로 리스트를 확인하고 데이터가 있다면 존재하는 key에서 데이터를 하나 가져오고 종료 됩니다.

 

꺼내오면서 저장 :RPOPLPUSH, BRPOPLPUSH

RPOPLPUSH : rpoplpush src_key dest_key 예)rpoplpush userlist targetlist, userlist의 오른쪽에서 데이터를 꺼내 targetlist의 왼쪽에 삽입 합니다.

rpop + lpush와 같은 기능이 원자적으로 동작 합니다.

src_key 와 dest_key가 같은 key로 지정이 가능하면 이런 경우 Circular list(환형 리스트)가 됩니다.

BRPOPLPUSH  : brpoplpush src_key dest_key timeout  예)brpoplpush userlist targetlist 5,

userlist 오른쪽에서 데이터를 꺼내 targetlist의 왼쪽에 삽입 합니다.

userlist에 데이터가 없으면 timeout 동안 대기하고, 데이터가 들어오면 pop하고 data와 시간(초)를 리턴 합니다.

rpop + lpush와 같은 기능이 원자적으로 동작 합니다.

src_key 와 dest_key가 같은 key로 지정이 가능하면 이런 경우 Circular list(환형 리스트)가 됩니다.

 

조회 :LRANGE, LINDEX, LLEN

LRANGE : lrange key start stop 예) lrange userlist 0 2, userlist에서 왼쪽에서 0번 부터 2번까지 조회 합니다.

stop에 -1을 입력하면 마지막 까지 조회 합니다. 0 -1 을 입력하면 전체를 조회 합니다.

lrange userlist -2 -1, userlist에서 오른쪽으로 부터 왼쪽으로 조회 합니다. 오른쪽부터 왼쪽으로 첫번째가 -1, 두번째가 -2 입니다.

LINDEX : lindex key index 예) lindex userlist 0, userlist에서 0번째 데이터를 조회 합니다.

index는 양수(0,1,2...)인 경우 왼쪽부터 지정되며, 음수(-1,-2,-3,...)일 경우 오른쪽 부터 지정 됩니다.

LLEN :llen key 예) llen userlist, userlist의 value 개수를 조회 합니다.

 

변경 :LSET

LSET :lset key index value 예) lset userlist 1 "일지매", userlist의 2번째 value를 "일지매" 로 치환 합니다.

index는 양수(0,1,2...)인 경우 왼쪽부터 지정되며, 음수(-1,-2,-3,...)일 경우 오른쪽 부터 지정 됩니다.

 

삭제 :LREM, LTRIM

LREM :lrem key count value 예)lrem userlist 2 "일지매", userlist의 왼쪽 부터 "일지매"를 2만큼 삭제 합니다. 삭제된 value 수만큼 리턴 합니다.

count가 음수라면 list의 오른쪽에서 count 수 만큼 삭제 합니다. count가 0이면 value에 해당하는 data를 모두 삭제 합니다

LTRIM :ltrim key start stop 예)ltrim userlist 1 2, userlist의 왼쪽 부터 1부터 2까지의 value를 제외한 모든 data를 삭제 합니다.

성공시 OK가 리턴됩니다. start stop에 음수를 쓰는 경우 오른쪽 부터 index 범위를 제외 한 모든data를 삭제 합니다.



출처: https://code-factory.tistory.com/5?category=724511 [코드공장]

'NoSQL > redis' 카테고리의 다른 글

Redis Lua Script를 활용 예  (0) 2021.04.11
Redis 의 Lua Script 활용  (0) 2021.04.11
Redis cluster  (0) 2021.04.11
redis Strings  (0) 2021.04.11
redis Sorted Sets  (0) 2021.04.11
redis Sets  (0) 2021.04.11
redis Hashes  (0) 2021.04.11
[Redis, 레디스] 레디스 소개 및 아키텍처, 주의할 점(Redis Overview, Redis Architecture, Tool Tip)  (0) 2021.03.29