Redis 문자열 실습: 기본 데이터 타입 다루기

2024. 9. 11. 10:36·DB/Redis
~ docker exec -it 06f8c72dd4cc redis-cli
127.0.0.1:6379> RPUSH stack1 100
(integer) 1
127.0.0.1:6379> RPUSH stack1 100
(integer) 2
127.0.0.1:6379> RPUSH stack1 100
(integer) 3
127.0.0.1:6379> RPUSH stack1 200
(integer) 4
127.0.0.1:6379> RPOP stack1
"200"
127.0.0.1:6379> RPOP stack1
"100"
127.0.0.1:6379> RPOP stack1
"100"
127.0.0.1:6379> RPOP stack1
"100"
127.0.0.1:6379> RPOP stack1
(nil)
127.0.0.1:6379> RPUSH queue1 100
(integer) 6
127.0.0.1:6379> RPUSH queue1 200
(integer) 7
127.0.0.1:6379> RPUSH queue1 300
(integer) 8
127.0.0.1:6379> RPUSH queue1 400
(integer) 9
127.0.0.1:6379> LRANGE queue1 0 -1
1) "100"
2) "200"
3) "300"
4) "400"
127.0.0.1:6379> LPOP queue1
"100"
127.0.0.1:6379> LPOP queue1
"200"
127.0.0.1:6379> LPOP queue1
"300"
127.0.0.1:6379> LPOP queue1
"400"
127.0.0.1:6379> LPOP queue1
(nil)
127.0.0.1:6379> RPUSH queue1 100
(integer) 1
127.0.0.1:6379> RPUSH queue1 100
(integer) 2
127.0.0.1:6379> RPUSH queue1 200
(integer) 3
127.0.0.1:6379> RPUSH queue1 200
(integer) 4
127.0.0.1:6379> RPUSH queue1 300
(integer) 5
127.0.0.1:6379> LRANGE queue1 0 -1
1) "100"
2) "100"
3) "200"
4) "200"
5) "300"
127.0.0.1:6379> LRANGE queue1 0 -1
127.0.0.1:6379> LTRIM queue1 0 2
OK
127.0.0.1:6379> LRANGE queue1 0 -1
1) "100"
2) "100"
3) "200"
127.0.0.1:6379> RPUSH queue1 400
(integer) 4
127.0.0.1:6379> RPUSH queue1 50
(integer) 5
127.0.0.1:6379> RPUSH queue1 60
(integer) 6
127.0.0.1:6379> RPUSH queue1 70
(integer) 7
127.0.0.1:6379> LRANGE queue1 0 -1
1) "100"
2) "100"
3) "200"
4) "400"
5) "50"
6) "60"
7) "70"
127.0.0.1:6379> LTRIM queue1 0 2
OK
127.0.0.1:6379> LRANGE queue1 0 -1
1) "100"
2) "100"
3) "200"

위 Redis 명령어 세션에서 수행된 작업에 대한 설명은 다음과 같습니다.

1. RPUSH와 RPOP을 이용한 stack1 리스트 조작:

127.0.0.1:6379> RPUSH stack1 100
127.0.0.1:6379> RPUSH stack1 100
127.0.0.1:6379> RPUSH stack1 100
127.0.0.1:6379> RPUSH stack1 200
  • RPUSH 명령어는 리스트의 오른쪽(끝)에 요소를 추가합니다.
  • 위 명령어는 stack1 리스트에 차례로 100, 100, 100, 200을 추가합니다.
127.0.0.1:6379> RPOP stack1
  • RPOP 명령어는 리스트의 마지막 요소를 제거하고 반환합니다.
  • 위 명령어에서는 stack1 리스트의 끝에서부터 요소를 하나씩 꺼냅니다. 리스트의 순서대로 "200", "100", "100", "100"을 꺼내고, 마지막에 리스트가 비면 nil을 반환합니다.

2. RPUSH, LRANGE, LPOP을 이용한 queue1 리스트 조작:

127.0.0.1:6379> RPUSH queue1 100
127.0.0.1:6379> RPUSH queue1 200
127.0.0.1:6379> RPUSH queue1 300
127.0.0.1:6379> RPUSH queue1 400
  • queue1 리스트에 차례대로 100, 200, 300, 400을 추가합니다.
127.0.0.1:6379> LRANGE queue1 0 -1
  • LRANGE queue1 0 -1는 queue1 리스트의 모든 요소를 반환합니다. 여기서 0은 첫 번째 요소, -1은 마지막 요소를 의미합니다.
  • 이 명령어는 리스트에 있는 100, 200, 300, 400을 반환합니다.
127.0.0.1:6379> LPOP queue1
  • LPOP 명령어는 리스트의 첫 번째 요소를 제거하고 반환합니다.
  • queue1 리스트에서 차례로 "100", "200", "300", "400"을 제거한 후, 리스트가 비면 nil을 반환합니다.

3. 새로운 요소 추가 및 LTRIM을 이용한 리스트 자르기:

127.0.0.1:6379> RPUSH queue1 100
127.0.0.1:6379> RPUSH queue1 100
127.0.0.1:6379> RPUSH queue1 200
127.0.0.1:6379> RPUSH queue1 200
127.0.0.1:6379> RPUSH queue1 300
  • queue1 리스트에 다시 100, 100, 200, 200, 300을 차례로 추가합니다.
127.0.0.1:6379> LRANGE queue1 0 -1
  • queue1 리스트의 모든 요소를 반환하며, 그 결과 100, 100, 200, 200, 300이 포함됩니다.
127.0.0.1:6379> LTRIM queue1 0 2
  • LTRIM queue1 0 2 명령어는 리스트를 0번 인덱스부터 2번 인덱스까지 자릅니다. 즉, 첫 번째 세 요소만 남기고 나머지는 모두 제거됩니다.
  • 리스트는 이제 100, 100, 200만 남게 됩니다.

4. 다시 리스트에 요소 추가 및 LTRIM으로 자르기:

127.0.0.1:6379> RPUSH queue1 400
127.0.0.1:6379> RPUSH queue1 50
127.0.0.1:6379> RPUSH queue1 60
127.0.0.1:6379> RPUSH queue1 70
  • queue1 리스트에 다시 400, 50, 60, 70을 추가합니다.
127.0.0.1:6379> LRANGE queue1 0 -1
  • queue1 리스트의 모든 요소를 반환하며, 그 결과는 100, 100, 200, 400, 50, 60, 70입니다.
127.0.0.1:6379> LTRIM queue1 0 2
  • 리스트를 다시 0번 인덱스부터 2번 인덱스까지 자릅니다. 이제 리스트에는 100, 100, 200만 남습니다.

27.0.0.1:6379> LRANGE queue1 0 -1
(empty array)
127.0.0.1:6379> LPUSH queue1 200
(integer) 1
127.0.0.1:6379> LPUSH queue1 100
(integer) 2
127.0.0.1:6379> LPUSH queue1 100
(integer) 3
127.0.0.1:6379> LPUSH queue1 50
(integer) 4
127.0.0.1:6379> LPUSH queue1 60
(integer) 5
127.0.0.1:6379> LPUSH queue1 70
(integer) 6
127.0.0.1:6379> LRANGE queue1 0 -1
1) "70"
2) "60"
3) "50"
4) "100"
5) "100"
6) "200"
127.0.0.1:6379> LTRM queue1 0 2
(error) ERR unknown command 'LTRM', with args beginning with: 'queue1' '0' '2'
127.0.0.1:6379> LTRIM queue1 0 2
OK
127.0.0.1:6379> LRANGE queue1 0 -1
1) "70"
2) "60"
3) "50"

5. BLPOP:

BRPOP는 Redis에서 blocking list pop 명령어입니다. 이 명령어는 하나 이상의 리스트의 끝에서 (오른쪽에서) 요소를 제거하고 반환하는 작업을 수행하지만, 해당 리스트가 비어있을 경우에는 지정된 시간 동안 대기합니다. 만약 시간 내에 요소가 추가되지 않으면 nil을 반환합니다.

BRPOP의 사용법은 다음과 같습니다:

BRPOP key [key ...] timeout

매개변수 설명:

  • key [key ...]: 리스트의 이름입니다. 하나 이상의 리스트를 지정할 수 있습니다. 여러 리스트를 지정하면, Redis는 지정된 리스트들 중에서 요소가 있는 리스트를 차례대로 확인합니다.
  • timeout: 리스트가 비어있을 경우 얼마나 대기할 것인지를 초(second) 단위로 지정합니다. 0을 지정하면 무한정 대기합니다.

예시:

1. 리스트가 비어있지 않은 경우:

   RPUSH mylist "one"
   RPUSH mylist "two"

   BRPOP mylist 0
   # 응답: 1) "mylist", 2) "two"

이 경우, mylist에서 마지막 요소인 "two"가 제거되고 반환됩니다.

2. 리스트가 비어있는 경우:

   BRPOP mylist 5

이 경우, mylist가 비어 있으면 5초 동안 요소가 추가되기를 기다립니다. 시간이 지나도 요소가 추가되지 않으면 nil을 반환합니다.

3. 여러 리스트에서 블록킹 처리:

   BRPOP list1 list2 10

이 명령어는 list1과 list2에서 마지막 요소를 확인합니다. 만약 list1이 비어있으면 list2를 확인합니다. 둘 다 비어있으면 10초 동안 대기합니다.

특징:

  • 블록킹: 리스트가 비어있을 때 다른 요소가 추가될 때까지 대기할 수 있다는 점에서 BRPOP은 RPOP과 다릅니다.
  • 타임아웃: 시간 초과를 설정하여 특정 시간 동안만 대기할 수 있습니다. 0을 설정하면 무기한 대기합니다.

이 명령어는 주로 consumer가 데이터를 처리할 준비가 될 때까지 대기해야 하는 producer-consumer 패턴에서 유용하게 사용됩니다.

저작자표시 (새창열림)

'DB > Redis' 카테고리의 다른 글

Redis Hash 실습: 키-필드-값 데이터 구조 관리하기  (2) 2024.09.11
Redis Set 실습: 집합 연산과 활용법  (0) 2024.09.11
Redis 데이터타입 정리: 문자열부터 복합 데이터까지  (0) 2024.09.11
Redis CLI 사용법: 명령어로 시작하기  (1) 2024.09.11
Redis 입문: 기본 개념 톺아보기  (0) 2024.09.11
'DB/Redis' 카테고리의 다른 글
  • Redis Hash 실습: 키-필드-값 데이터 구조 관리하기
  • Redis Set 실습: 집합 연산과 활용법
  • Redis 데이터타입 정리: 문자열부터 복합 데이터까지
  • Redis CLI 사용법: 명령어로 시작하기
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (283)
      • 여러가지 (108)
        • 알고리즘 & 자료구조 (73)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (39)
        • 파이썬 (31)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (0)
        • 암호화폐 (0)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    spring
    AWS
    docker
    완전탐색
    시험
    프로그래머스
    취업리부트
    FastAPI
    mybatis
    Redis
    ecs
    그리디
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    reactor
    Spring WebFlux
    WebFlux
    백준
    Python
    RDS
    OOP
    자바
    Docker-compose
    celery
    EC2
    java
    DP
    SAA
    항해99
    Spring Boot
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
Redis 문자열 실습: 기본 데이터 타입 다루기
상단으로

티스토리툴바