ngx_hash.{c|h}는 모듈 구성 분석에 자주 사용되는 nginx에서 더 중요한 해시 구조를 구현합니다. 해시 구조는 읽기 전용입니다. 초기 생성 중에는 여기에 저장된 키-값 쌍만 제공될 수 있으며 이후에는 "추가, 삭제, 수정 및 확인" 작업만 수행할 수 있습니다.
먼저 해시 구조의 메모리 레이아웃을 살펴보겠습니다.
[cpp] 보기
일반 카피프린트?
- typedef struct {
- ngx_hash_t *hash; ngx_hash_key_pt key; 해시 값 계산에 사용되는 함수 포인터
- >//허용 최대 버킷 수
ngx_uint_t bucket_size; - //각 버킷에 허용되는 최대 공간
-
- char *name; 해시 이름(오류 로그에만 사용됨)
-
ngx_pool_t *pool; //해시 구조 공간 할당에 사용되는 메모리 풀
- ngx_pool_t * temp_pool;//임시 데이터 공간 할당을 위한 메모리 풀
- } ngx_hash_init_t; 여기서는 코드가 구문 분석되지 않습니다. 번거로워 보이지만 사용하기에는 매우 편리합니다. 일반 작업에는 해시 생성 및 해시 검색이 포함됩니다. 해시 생성: 1. ngx_hash_key_t를 멤버로 사용하여 키, 값 및 키를 사용하여 계산된 해시 값을 포함하는 배열을 구성합니다.
- 2. ngx_hash_t의 멤버를 포함하는 본문의 구성요소는 해시 구조이며 버킷 크기, 메모리 풀 등과 같은 기타 초기 설정도 포함합니다. 3. ngx_hash_init를 호출하고 ngx_hash_init_t 구조와 전달합니다. ngx_hash_key_t의 배열과 배열의 길이를 초기화하여 ngx_hash_init_t의 해시 멤버가 우리가 원하는 해시 구조가 되도록검색 과정은 매우 간단합니다1. 키 값
- 2. ngx_hash_find를 사용하여 검색합니다. 해시 값과 키를 동시에 전달해야 합니다. 반환되는 것은 값 포인터입니다nginx의 경우 해시는 검색 시 버킷팅 후 선형 검색 방식을 사용하므로 버킷 수가 결정되면 검색 효율성은 전체 키-값 쌍 수에 반비례합니다
위 내용은 nginx 소스코드 연구 노트(10) - 기본 컨테이너 - ngx_hash 내용을 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.