Redis 데이터 구조 -- skiplist
점프 표 는 평균 O (logN), 최 악의 O (N) 복잡 도의 노드 를 찾 을 수 있 고 순서 적 인 조작 을 통 해 노드 를 대량으로 처리 할 수 있 습 니 다. 대부분의 경우 점프 표 의 효율 은 밸 런 스 트 리 와 견 줄 수 있 고 점프 표 의 실현 이 밸 런 스 수 보다 간단 하기 때문에 밸 런 스 트 리 대신 점프 표를 사용 하 는 프로그램 이 많다. redis 는 점프 표를 질서 있 는 집합 키 의 바 텀 실현 중 하나 로 사용 합 니 다. 질서 있 는 집합 에 포 함 된 요소 의 수량 이 많 거나 질서 있 게 집합 하 는 요소 의 구성원 (member) 이 비교적 긴 문자열 일 때 Redis 는 점프 표를 질서 있 는 집합 키 의 바 텀 으로 사용 합 니 다.
링크, 사전 등 데이터 구조 가 Redis 내부 에 광범 위 하 게 응용 되 는 것 과 달리 Redis 는 두 곳 만 점프 표를 사 용 했 고 하 나 는 질서 있 는 집합 키 를 실현 하 는 것 이 고 다른 하 나 는 클 러 스 터 노드 에서 내부 데이터 구조 로 사용 되 는 것 이다. 그 밖 에 점프 표 는 Redis 에서 다른 용도 가 없다.
/* ZSETs use a specialized version of Skiplists */
typedef struct zskiplistNode {
robj *obj; //
double score; //
struct zskiplistNode *backward; //
struct zskiplistLevel { //
struct zskiplistNode *forward; //
unsigned int span; //
} level[];
} zskiplistNode;
typedef struct zskiplist {
struct zskiplistNode *header, *tail; //header: ,tail :
unsigned long length; // , , ( )
int level; // , ( )
} zskiplist;
typedef struct zset {
dict *dict;
zskiplist *zsl;
} zset;
hearder 와 tail 지침 은 각각 점프 표 의 표 두 와 표 미 노드 를 가리 키 는데 이 두 개의 지침 을 통 해 프로그램 포 지 셔 닝 표 두 노드 와 표 미 노드 의 복잡 도 는 O (1) 이다.
length 속성 을 사용 하여 노드 의 수량 을 기록 하면 프로그램 은 O (1) 복잡 도 에서 점프 표 의 길 이 를 되 돌려 줄 수 있 습 니 다.
요약:
점프 표 는 질서 있 게 집합 하 는 밑바닥 실현 중의 하나 이다.
Redis 의 점프 표 는 zskiplist 와 zskiplist Node 두 가지 구조 로 구성 되 는데 그 중에서 zskiplist 는 점프 표 정보 (예 를 들 어 표 두 노드, 표 꼬리 노드, 길이) 를 저장 하 는 데 사용 되 고 zskiplist Node 는 점프 표 노드 를 표시 하 는 데 사용 된다.
모든 점프 표 노드 의 층 고 는 1 에서 32 사이 의 임 의 수 이다.
같은 점프 표 에서 여러 노드 는 같은 점 수 를 포함 할 수 있 지만 각 노드 의 구성원 대상 은 유일 해 야 한다.
점프 표 의 노드 는 값 크기 에 따라 정렬 하고 값 이 같 을 때 노드 는 구성원 대상 의 크기 에 따라 정렬 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.