>  기사  >  기본 수준에서 Redis의 5가지 데이터 구조를 구현하는 방법

기본 수준에서 Redis의 5가지 데이터 구조를 구현하는 방법

醉折花枝作酒筹
醉折花枝作酒筹원래의
2021-07-07 10:38:505766검색

구현 방법: 1. 각 데이터 구조에는 자체 기본 내부 인코딩 구현이 있으며 여러 구현이 있으므로 Redis는 적절한 시나리오에서 적절한 내부 인코딩을 선택합니다. 2. 각 데이터 구조에는 두 가지 이상의 유형이 있습니다. 구현 3. 내부 코딩은 다양한 외부 데이터 구조의 내부 구현으로 사용될 수 있습니다.

기본 수준에서 Redis의 5가지 데이터 구조를 구현하는 방법

이 튜토리얼의 운영 환경: Windows 7 시스템, Redis 버전 5.0.10, DELL G3 컴퓨터.

Redis에는 문자열, 해시, 집합, zset 및 목록의 다섯 가지 기본 데이터 구조가 있습니다. 다음은 Redis 3.0.6 버전을 다운로드할 때 하위 레이어에서 이를 구현하는 방법을 설명합니다.

요약하자면

(1) 각 데이터 구조에는 고유한 기본 내부 인코딩 구현이 있으며 여러 구현이 있으므로 Redis는 적절한 시나리오에서 적절한 내부 인코딩을 선택합니다.

(2) 각 데이터 구조에는 두 개 이상의 내부 인코딩 구현이 있음을 알 수 있습니다. 예를 들어 문자열 데이터 구조에는 raw, int 및 embstr의 세 가지 내부 인코딩이 포함되어 있습니다.

(3) 동시에 일부 내부 인코딩은 다양한 외부 데이터 구조의 내부 구현으로 사용될 수 있습니다. 예를 들어 ziplist는 해시, 목록 및 zset에 공통된 내부 인코딩입니다.

Dynamic String SDS

SDS는 "Simple Dynamic String"의 약어입니다. Redis의 모든 시나리오에 나타나는 문자열은 기본적으로 SDS에 의해 구현됩니다.

  • 다음과 같이 숫자가 아닌 모든 키: key msg in set msg "hello"

  • 문자열 데이터 유형의 값, 예: value "hello" in set msg "hello"

  • 문자열이 아닌 데이터 유형의 "문자열 값"(예: "apple" "banana" in rpush 과일 "apple" "banana"

SDS는 다음과 같습니다) this:

기본 수준에서 Redis의 5가지 데이터 구조를 구현하는 방법

free: 남은 공간은 얼마나 되나요?

len: 문자열 길이

buf: 저장된 문자 배열

Space 사전 할당

문자열 에이전트 수정에 따른 메모리 오버헤드를 줄이려면 할당 수에 따라 SDS는 "일회성 관리" 전략을 채택합니다.

  • 수정 후 SDS 길이가

  • SDS 길이가 >= 1MB인 경우 수정 후 확장 시 수정된 길이를 충족할 뿐만 아니라 1MB의 공간이 추가됩니다.

Lazy space release

문자열을 줄일 때 메모리 재할당 작업을 피하기 위해 SDS는 데이터가 줄어들 때 즉시 공간을 해제하지 않습니다.

int

은 의도적으로 ""

set game "111"

Double linked list

lpush, rpush, lpop, rpop

은 다음과 같습니다.

기본 수준에서 Redis의 5가지 데이터 구조를 구현하는 방법

는 두 부분으로 나뉩니다.

  • "조정 부분": 주황색
    • head: 특정 이중 연결 목록의 머리 부분을 가리킵니다.

    • tail: 특정 이중 연결 목록의 꼬리를 가리킵니다

    • len: 이중 연결 목록의 길이

  • "특정 구현": 파란색
    • 에는 선행 항목 pre와 후속 항목이 있습니다.

이중 연결 목록은 list와 listNode라는 두 가지 데이터 구조로 구성됩니다.

관련 튜토리얼 권장 사항: Redis 튜토리얼

위 내용은 기본 수준에서 Redis의 5가지 데이터 구조를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.