본문 바로가기

좋아하는 것_매직IT/9.redis

13.Redis, 리스트 데이터에 대해서 알아보자.

반응형

리스트에 대해서...

  • 리스트 데이터는 저장 순서를 기억하는 데이터 구조이며, 중복을 허용함.
  • 저장가능한 최대요소 수
    • 2의 32승 - 1 개, 대략적으로 42억개...
  • 구현은 이중 링크드 리스트로 구현되어 있음.
    • 즉, 첫번째(head)요소와 마지막(tail)요소의 조회 시간이 가장 빠르고, 리스트의 중간에 저장된 데이터를 조회하는 시간이 가장 오래 걸리는 특징이 존재함.
      • head
        • 데이터 왼쪽
      • tail
        • 데이터 오른쪽
    • lpush
      • left push
    • rpush
      • right push
  • 리스트 데이터의 저장구조
      • 리스트 데이터 구조는 내부적으로 Deque(Double ended queue) 구조를 구현하고 있음.
        • Deque 란?
          • 선형 자료구조인 stack 과 queue 의 특징을 하나로 모은 자료구조
            • 양쪽 방향 모두에서 입력과 출력을 할 수 있음.
          • stack
            • 한쪽 방향에서만 데이터를 입력하고 조회할 수 있음.
          • queue
            • 한쪽 방향으로 입력하고 반대쪽 방향에서 조회할 수 있음.

리스트 데이터의 연산

  • stack 연산
    • 나중에 입력된 데이터가 먼저 출력되는 자료구조
      • 위치정보
        • bottom
        • top
    • 데이터가 입력되면, bottom 부터 top 방향으로 데이터를 하나씩 쌓아감.
      • lpush, lpop or rpush, rpop 명령을 사용하여 리스트 데이터의 한쪽에서만 자료의 입출력이 일어나도록 구현함.
  • queue 연산
    • 먼저 입력된 데이터가 먼저 출력되는 자료구조
      •  위치정보
        • head
        • tail
    • 데이터가 입력되면, head부터 tail 방향으로 데이터를 하나씩 쌓아감.
      • lpush, rpop or rpush, lpop 명령을 사용하여 큐 자료구조를 구현함.
  • 리스트 데이터 조회
    • 단건조회
      • 하나의 요소를 조회함
      • lindex
    • 범위조회
      • 인덱스 범위에 해당하는 요소를 조회함.
      • lrange
    • 블로킹 조회
      • 데이터가 입력될때까지 기다리는 조회.
      • 블로킹이란?
        • 어떤 연산이 특정조건이 될때까지 대기하는 것을 말함.
        • 지원명령 
          • 참고로, B는 Blocking 을 의미함.
            • blpop
            • brpop
            • brpoplpush

리스트 데이터 주요 명령

  • rpop 
    • 지정된 리스트에 저장된 요소중 맨 오른쪽의 요소를 조회함.
      • 단, 저장된 데이터가 없거나, 키가 존재하지 않을 때는 nil을 반환함.
    • 명령) rpop [key]
    • 응답) <벌크 응답>, 조회된 요소값.
  • blpop
    • 지정된 리스트에 지정된 요소 중 맨 왼쪽 요소를 조회함.
      • 단, 저장된 데이터가 없거나 키가 존재하지 않을 때는 말료시간에 지정된 시간만큼 대기함.
        • 단위
          • 초(sec)
          • 단, 지정된 만료시간이 0이면, 데이터가 들어올때까지 무한히 대기함.
    • 명령) blpop [key1] [key2] .. [expire time]
    • 응답) <멀티벌크응답>, 조회된 요소
  • brpop
    • 지정된 리스트에 저장된 요소 중 맨 오른쪽 요소를 조회함.
      • 단, 저장된 데이터가 없거나 키가 존재하지 않을 때는 말료시간에 지정된 시간만큼 대기함.
      • 단위
        • 초(sec)
        • 단, 지정된 만료시간이 0이면, 데이터가 들어올때까지 무한히 대기함.
    • 명령) brpop [key1] [key2] .. [expire time]
    • 응답) <멀티벌크응답>, 조회된 요소
  • lindex
    • 지정된 리스트에 저장된 요소의 인덱스에 해당하는 요소의 값을 조회함.
      • 인덱스는 0 부터 시작.
      • 리스트 데이터의 왼쪽이 시작위치임.
      • 음수표현을 사용할 수 있음.
      • 단, 해당 위치에 요소가 존재하지 않을 때 nil 을 반환함.
    • 명령) lindex[key] [index]
    • 응답) <벌크응답>, 해당 인덱스 위치에 저장된 요소
  • 이외의 명령은 아래 페이지를 참조하면됨.
  • 예시

결론

  • Redis 에는 리스트 데이터가 존재함.
    • 상황에 따라서, 명령을 조합하여 stack, queue 등등의 자료구조를 구현하면됨.
  • 리스트 데이터 조회 중 블로킹 조회가 있으며, 대기 시간도 존재하여, 해당 기능을 잘 활용한다면, stack, queue 등등의 구조의 작업 큐로 사용할 수 도 있을 것 같음.

  • 오늘의 명언 한마디
    • 모든 실수에는 마술이 숨어 있다. 따라서 나는 더욱 많은 실수를 하면 할수록, 그런 실수에서 더많이 배울수록 삶에서 더많은 마술을 갖는다. -로버트 기요사키, 『부자아빠, 가난한아빠3』 중에서..
      • 참고로, 이글을 접하고 나서..제 nickname 이 Magic(마술) 된 이유이기도 하지요 ^^;  삶의 실수를 통해서 더많은 배움과 더많은 삶의 마술을 갖자!

  • 오늘의 영어 한마디
    • 질문) What's the matter with you?
      • 대체 왜 그러는 거야?
    • 응답) I'm sorry, I won't do it any more.
      • 미안해, 다시는 안 그럴게.
    • 해설
      • What's the matter with you? 는 "무슨일있어?" 라는 의미가 아니라, 예문과 같이 화를 내는 상황에선 "대체 왜 그런거야?" 라는 뜻으로, 상대방을 힐문하는 뉘앙수가 강함.
        • What's wrong with you?  역시 같은 의미.
728x90
300x250