이번 시간에는 Redis 리스트에 대해
알아보도록 하겠습니다.
Redis 리스트
Redis list는 문자열 값에 연결된 목록으로
다음과 같은 용도로 사용됩니다.
- 스택 및 대기열 구현
- 백그라운드 작업 시스템에 대한 대기열 구축
Redis 리스트 사용법
Redis 리스트를 사용하기 위해서는
다음과 같은 코드를 입력해줍니다.
- 리스트를 대기열 처리 (처음에 입력후 출력)
> LPUSH work:queue:ids 101
(integer) 1
> LPUSH work:queue:ids 237
(integer) 2
> RPOP work:queue:ids
"101"
> RPOP work:queue:ids
"237"
- 목록을 스택처럼 처리 (첫번째 입력, 마지막 출력)
> LPUSH work:queue:ids 101
(integer) 1
> LPUSH work:queue:ids 237
(integer) 2
> LPOP work:queue:ids
"237"
> LPOP work:queue:ids
"101"
- 목록 길이 확인하기
> LLEN work:queue:ids
(integer) 0
- 한 목록에서 요소를 원자적으로 팝업하고
다른 목록으로 표시하기
> LPUSH board:todo:ids 101
(integer) 1
> LPUSH board:todo:ids 273
(integer) 2
> LMOVE board:todo:ids board:in-prograss:ids LEFT LEFT
"273"
> LRANGE board:todo:ids 0 -1
1) "101"
> LRANGE board:in-prograss:ids 0 -1
1) "273"
- 100개의 요소를 초과하지 않는 제한된 목록을
만들려면 LPUSH를 호출할 때마다 LTRIM을
호출할 수 있습니다.
> LPUSH notifications:user:1 "You've got mail!"
(integer) 1
> LTRIM notifications:user:1 0 99
OK
> LPUSH notifications:user:1 "Your package will be delivered at 12:01 today."
(integer) 2
> LTRIM notifications:user:1 0 99
OK
Limits
Redis 목록의 최대 길이는
2 ^ 32 - 1 (4,294,967,295) 요소입니다.
기본 명령
- LPUSH: 목록의 head에 새 요소를 추가합니다.
RPUSH가 꼬리에 추가됩니다. - LPOP: 목록의 head에서 요소를 제거하고 반환합니다.
RPOP는 목록의 꼬리 부분에서 동일하게 수행합니다. - LLEN: LLEN은 목록의 길이를 반환합니다.
- LMOVE: LMOVE는 한 목록에서 다른 목록으로
요소를 원자적으로 이동합니다. - LTRIM: LTRIM은 목록을 지정된 범위의
요소를 줄입니다.
Blocking commands
리스트는 여러 블로킹 명령을 지원합니다.
예를 들면 다음과 같습니다.
- BLPOP: BLPOP은 목록 머리글에서 요소를
제거하고 반환합니다. 목록이 비어 있으면 요소를
사용할 수 있게 되거나 지정된 시간 초과에
도달할 때까지 명령을 기다립니다. - BLMOVE: BLMOVE는 소스 목록에서 대상 목록으로
요소를 원자적으로 이동합니다. 소스 목록이 비어 있으면
새 요소를 사용할 수 있을 때까지 명령이 차단됩니다.
List 성능
List에 head나 tail에 접근하는 나열 작업은 O(1)이며,
이는 매우 효율적이라는 것을 의미합니다.
그러나 목록 내의 요소를 조작하는 명령은
일반적으로 O (n)입니다. 이러한 예에는
LINDEX, LINSERT 및 LSET이 포함됩니다.
이러한 명령을 실행할 때, 주로 큰 목록에서
작업할 때 주의해야 합니다.
List 대안
불확적한 일련의 이벤트를 저장하고 처리해야
하는 경우 Lists 대신 Redis streams를
고려해보는 것이 좋습니다.
참고 자료
'백엔드 > redis' 카테고리의 다른 글
[Redis] Redis - Redis 집합 (1) | 2023.02.17 |
---|---|
[Redis] Redis - Redis 문자열 (0) | 2023.01.31 |
[Redis] Redis 설치하기 - Linux 기준 (0) | 2023.01.30 |