2024. 4. 15. 14:51ㆍ기술 창고/DataBase
Redis의 List는 기본적으로 String 타입의 데이터들로 리스트화된 Linked List를 말합니다. (예 : ArrayList)
이를 통해 Queue와 Stack 형으로 운영되곤 합니다.
- Queue : 선입선출 형 자료구조로써, 가장 먼저 들어간 데이터가 가장 먼저 출력되는 자료구조
- Stack : 후입선출 형 자료구조로써, 가장 늦게 들어간 데이터가 가장 먼저 출력되는 자료구조
주요 명령어
- LPUSH
- RPUSH
- LPOP
- RPOP
- LLEN
- LTRIM
- LRANGE
- BLPOP
- BRPOP
Command 실습
RPUSH
rpush는 리스트의 오른쪽(마지막)에 데이터를 넣는 명령어입니다.
- 형식 : rpush {리스트 명} {데이터 값}
RPOP
rpop은 리스트의 오른쪽(마지막)에 있는 데이터를 출력하는 명령어입니다.
- 형식 : rpop {리스트 명}
LPUSH
lpush는 리스트의 왼쪽(첫 번째)에 데이터를 넣는 명령어입니다.
- 형식 : lpush {리스트 명} {데이터 값}
LPOP
lpop은 리스트의 왼쪽(첫 번째)에 있는 데이터를 출력하는 명령어입니다.
- 형식 : lpop {리스트 명} {데이터 명}
# 이처럼 RPUSH, RPOP, LPUSH, LPOP 은 자료구조의 형태에 따라 적절히 사용합니다.
# Queue 리스트의 경우, RPUSH로 데이터를 넣었으면 LPOP을, LPUSH로 넣었으면 RPOP을 사용합니다.
# Stack 리스트의 경우, RPUSH로 데이터를 넣었으면 RPOR을, LPUSH로 넣었으면 LPOP을 사용합니다.
LRANGE
lrange는 리스트의 일정 크기 만큼 데이터를 조회하는 명령어입니다.
기본적으로 시작 인덱스는 0부터 시작하며 끝 인덱스의 경우에는 -1로 지정하게 되면 마지막 데이터까지 조회되게 됩니다.
- 형식 : lrange {리스트 명} {시작 인덱스} {끝 인덱스}
LTRIM
ltrim은 리스트의 일정 크기만큼 잘라 리스트를 재구성하는 명령어입니다.
- 형식 : ltrim {리스트 명} {시작 인덱스} {끝 인덱스}
BRPOP
brpop은 데이터가 존재하지 않을 경우에는 block 처리를 수행하여 pop 하지 못하도록 하고, 존재하면 그제서야 데이터를 Right Pop 해주는 명령어입니다.
- 형식 : brpop {리스트 명} {블락 대기 시간 (없어도 됨)}
BLPOP
blpop은 데이터가 존재하지 않을 경우에는 block 처리를 수행하여 pop 하지 못하도록 하고, 존재하면 그제서야 데이터를 Left Pop 해주는 명령어입니다.
- 형식 : blpop {리스트 명} {블락 대기 시간 (없어도 됨)}
LLEN
llen은 현재 리스트의 길이를 보여주는 명령어입니다.
- 형식 : llen {리스트 명}
Spring Boot 사전 연동 필요
https://jindevelopetravel0919.tistory.com/395
Spring Boot 활용 실습
// Redis - List
public void jedisOfList() {
try (JedisPool pool = jedisPoolSetting()) {
try (Jedis jedis = pool.getResource()) {
// [ list ]
// 1. stack
// [ RPUSH, LPUSH ]
// rpush, lpush로 데이터를 List에 저장
jedis.rpush("stack1", "aaa");
jedis.rpush("stack1", "bbb");
jedis.rpush("stack1", "ccc");
// [ LRANGE ]
// List의 특정 길이만큼의 데이터를 추출
List<String> stack1 = jedis.lrange("stack1", 0, -1);
stack1.forEach(System.out::println);
// stack의 경우, 후입선출 로직으로서 가장 나중에 들어간 데이터가 가장 먼저 추출되므로 push와 동일한 방향으로 pop을 수행
// [ LPOP, RPOP ]
// lpop, rpop 데이터 추출
System.out.println(jedis.rpop("stack1"));
System.out.println();
System.out.println("==================================");
// 2. queue
// [ RPUSH, LPUSH ]
// rpush, lpush로 데이터를 List에 저장
jedis.rpush("queue1", "zzz");
jedis.rpush("queue1", "xxx");
jedis.rpush("queue1", "sss");
// [ LRANGE ]
// List의 특정 길이만큼의 데이터를 추출
List<String> queue1 = jedis.lrange("queue1", 0, -1);
queue1.forEach(System.out::println);
// queue의 경우, 선입선출 로직으로서 가장 먼저 들어간 데이터가 가장 먼저 추출되므로 push의 반대 방향으로 pop을 수행
// [ LPOP, RPOP ]
// lpop, rpop 데이터 추출
System.out.println(jedis.lpop("queue1"));
System.out.println();
System.out.println("==================================");
// [ BLPOP, BRPOP ]
while (true) {
// 시간 제한을 두고 List에서 데이터를 pop으로 추출 하는 blpop, brpop
List<String> blpop = jedis.blpop(10, "queue:blocking");
if (blpop != null) {
blpop.forEach(System.out::println);
}
}
}
}
}
'기술 창고 > DataBase' 카테고리의 다른 글
[Redis] Hash 데이터 운영 - (Jedis) (0) | 2024.04.15 |
---|---|
[Redis] Set 데이터 운영 - (Jedis) (0) | 2024.04.15 |
[Redis] String 데이터 운영 - (Jedis) (0) | 2024.04.15 |
[Redis] Spring Boot 와 Redis 연동 설정 - (Jedis) (0) | 2024.04.15 |
[Redis] Spring Boot 와 Redis 연동 설정 - (RedisTemplate) (0) | 2024.04.15 |