구현 방법: 1. 각 데이터 구조에는 자체 기본 내부 인코딩 구현이 있으며 여러 구현이 있으므로 Redis는 적절한 시나리오에서 적절한 내부 인코딩을 선택합니다. 2. 각 데이터 구조에는 두 가지 이상의 유형이 있습니다. 구현 3. 내부 코딩은 다양한 외부 데이터 구조의 내부 구현으로 사용될 수 있습니다.
이 튜토리얼의 운영 환경: 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:
free: 남은 공간은 얼마나 되나요?
len: 문자열 길이
buf: 저장된 문자 배열
Space 사전 할당
문자열 에이전트 수정에 따른 메모리 오버헤드를 줄이려면 할당 수에 따라 SDS는 "일회성 관리" 전략을 채택합니다.
수정 후 SDS 길이가
SDS 길이가 >= 1MB인 경우 수정 후 확장 시 수정된 길이를 충족할 뿐만 아니라 1MB의 공간이 추가됩니다.
Lazy space release
문자열을 줄일 때 메모리 재할당 작업을 피하기 위해 SDS는 데이터가 줄어들 때 즉시 공간을 해제하지 않습니다.
int
은 의도적으로 ""
set game "111"
Double linked list
lpush, rpush, lpop, rpop
은 다음과 같습니다.
는 두 부분으로 나뉩니다.
head: 특정 이중 연결 목록의 머리 부분을 가리킵니다.
tail: 특정 이중 연결 목록의 꼬리를 가리킵니다
len: 이중 연결 목록의 길이
에는 선행 항목 pre와 후속 항목이 있습니다.
이중 연결 목록은 list와 listNode라는 두 가지 데이터 구조로 구성됩니다.
관련 튜토리얼 권장 사항: Redis 튜토리얼
위 내용은 기본 수준에서 Redis의 5가지 데이터 구조를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!