본문 바로가기
공부/레디스

개발자를 위한 레디스 - 1

by 띵커베르 2023. 11. 28.
728x90
  • String
    • 키:값 저장시 string 512MB 의 문자열 데이터를 저장할 . 수있으며, 이진 데이터를 포함하는 모든 종류의 문자열이 binary-safe 하게 처리되기 때문에 JPEG 이미지와 같은 바이트 값, HTTP 응답값 등의 다양한 데이터를 저장하는 것도 가능.
      • binary-safe 문자열이란?
        • 데이터 손실없이 null 바이트를 포함한 모든 바이트 시퀀스를 저장, 처리 조작할 수 있는 문자열 처리 방식이다.
        • text, number, binary data 등을 인코딩 걱정 없이 저장할 수 있다는 것을 얘기
  • list
    • list 에는 최대 42억여 개의 아이템을 저장할 수 있다.
  • sorted Set
    • 스코어에 따라 정렬되는 고유한 문자열의 집합
      • list 와 sorted set 모두 순서를 갖는 자료 구조이므로, 인덱스를 이용해 아이템에 접근할 수 있다.
        배열에서 인덱스를 사용하는 것이 더 일반적이기 때문에, 레디스에서도 list 에서 인덱스를 다루는 것이 더 빠를 것이라고 생각할 수 있지만, 인덱스를 이용해 아이템에 접근할 일이 많다면 list 가 아닌 sorted set 을 사용하는 것이 서 효율 적이다.
        list 에서 인덱스를 이용해 접근하는 것은 O(n) 으로 처리되지만, sorted set 에서는 O(log(n)) 으로 처리되기 때문이다.
        • 왜 sorted set 은 O(log(n)) 일까?
          • Redis 의 Sorted Set 은 주로 두 가지 데이터 구조를 사용하여 구현된다.스킵 리스트(Skip List)와 해시 테이블(Hash Table)
            • 스킵 리스트:
              • Sorted Set 의 주요 구성 요소.
                스킵 리스트는 여러 레벨의 연결 리스트로 구성되어 있으며, 각 레벨은 전체 데이터의 일부부만을 포함합니다.
                이 구조는 효율적인 검색, 삽입, 삭제를 가능하게 하며 이러한 연산은 평균적으로 O(log(n)) 을 가집니다.
            • 해시 테이블:
              • 각 요소의 값을 키로 사용하여 해당 요소의 위치와 점수를 저장함.주로 빠른 검색에 사용
          • 왜 O(log(n)) 일까?
            • 검색: 요소를 찾거나 점수를 조회할 때, 스킵 리스트를 통해 빠르게 접근할 수 있음.
              스킵 리스트는 각 레벨에서 절반씩 요소를 건너뛰기 때문에, 평균적으로 O(log(n)) 의 시간 복잡도를 가짐.
            • 삽입, 삭제: 새 요소를 추가하거나 기존 요소를 삭제할 때 스킵 리스트의 노드를 적절히 추가하거나 제거하는데, 이 과정에서 다양한 레벨의 링크를 업데이트해야 하므로, O(log(n)) 시간이 소요
            • http://redisgate.kr/redis/configuration/internal_skiplist.php
728x90

댓글