adlist는 Redis의 이중 종료 연결 목록으로 느린 로그 저장소, 마스터-슬레이브 복제의 오류 보고 클라이언트, 목록 데이터 구조 구현 등 Redis의 여러 곳에서 널리 사용됩니다. 그래서 이것 역시 매우 중요한 데이터 구조입니다.
1), Redis의 이중 끝 연결 목록의 데이터 구조
(권장: redis 비디오 자습서)
이중 끝 연결 목록(다음 코드는 src/adlist.h에 정의되어 있음):
1 2 3 4 5 6 7 8 9 |
|
이중 종료 연결 목록의 노드(다음 코드는 src/adlist.h에 정의되어 있습니다):
1 2 3 4 5 |
|
list는 각각 두 개의 포인터인 head와 tail을 통해 연결 목록의 머리와 꼬리 끝을 가리킵니다. 연결된 목록을 양수 및 음수 순서로 탐색할 수 있도록 하고 listNode의 void *값을 사용하면 모든 데이터를 저장할 수 있고 dup, free 및 match를 통해 listNode의 값을 처리하는 방법을 사용자 지정할 수 있습니다.
2. 이중 종료 연결 목록의 간단한 작업
연결 목록 만들기(다음 코드는 src/adlist.c에 정의되어 있음):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
연결 목록 끝에 추가(다음 코드가 정의됨) src/adlist.c):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
Traverse 연결 목록:
연결 목록을 순회하는 데 일반적으로 사용되는 두 가지 방법이 있습니다. 하나는 연결 목록의 길이에 따라 while 루프를 수동으로 순회하는 것이고, 다른 하나는 Redis 이중 종료 연결 목록에서 제공하는 반복자를 사용하는 것입니다.
수동 탐색(다음 코드는 src/adlist.c의 메모리 해제 함수에 정의되어 있습니다):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
반복자 모드 탐색은 아래를 참조하세요.
3) 이중 종료 연결 목록의 반복자
Redis 연결 목록의 반복을 용이하게 하기 위해 연결 목록이 반복자에 캡슐화됩니다. 반복자 구조는 다음과 같습니다(다음 코드는 src/adlist에 정의되어 있습니다). .h):
1 2 3 4 5 6 |
|
Iteration Server 사용 예:
1 2 3 4 5 6 7 8 |
|
더 많은 Redis 지식을 보려면 redis 소개 튜토리얼 칼럼을 주목하세요.
위 내용은 Redis에서 양방향 연결 목록 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!