ngx_hash.{c|h} implementiert eine wichtigere Hash-Struktur in Nginx, die häufig in der Modulkonfigurationsanalyse verwendet wird. Die Hash-Struktur ist schreibgeschützt. Bei der ersten Erstellung können nur die darin gespeicherten Schlüssel-Wert-Paare angegeben werden, und dann können nur die Vorgänge „Hinzufügen, Löschen, Ändern und Überprüfen“ ausgeführt werden.
Sehen wir uns zunächst das Speicherlayout der Hash-Struktur an:
[cpp] Ansicht
Klartext?
- typedef struct {
- ngx_hash_t *hash; ngx_hash_key_pt key; s
- ngx_uint_t Bucket_size; //Der maximal zulässige Platz für jeden Bucket
-
- char *name; Hash-Name (wird nur in Fehlerprotokollen verwendet)
- ngx_pool_t *pool;//Speicherpool zur Zuweisung von Hash-Strukturraum
-
ngx_pool_t * temp_pool; //Speicherpool zur Zuweisung von temporärem Datenraum
- } ngx_hash_init_t; Der Code wird hier nicht analysiert. Obwohl er umständlich aussieht, ist er dennoch recht praktisch. Zu den allgemeinen Vorgängen gehören das Erstellen von Hash und die Suche im Hash. Hash erstellen:
1. Erstellen Sie ein Array mit ngx_hash_key_t als Mitglied, einschließlich Schlüssel, Wert und einem mithilfe des Schlüssels berechneten Hash-Wert - 2. Erstellen Sie eine ngx_hash_init_t-Strukturvariablen des Körpers, der Mitglieder von ngx_hash_t enthält, sind Hash-Strukturen und enthalten auch einige andere Anfangseinstellungen, wie z. B. Bucket-Größe, Speicherpool usw. 3 Rufen Sie ngx_hash_init auf und übergeben Sie die ngx_hash_init_t-Struktur und die Array von ngx_hash_key_t und die Länge des Arrays, initialisieren Sie es, sodass das Hash-Mitglied von ngx_hash_init_t die gewünschte Hash-Struktur istDer Suchvorgang ist sehr einfach
1 Berechnen Sie den Hash Wert des Schlüssels-
2. Verwenden Sie ngx_hash_find, um zu suchen. Sie müssen den Hash-Wert und den Schlüssel gleichzeitig übergeben. Was zurückgegeben wird, ist der WertzeigerEs ist zu beachten, dass nginx Hash verwendet nach dem Bucketing bei der Suche die lineare Suchmethode. Wenn die Anzahl der Buckets bestimmt wird, ist die Sucheffizienz umgekehrt proportional zur Gesamtzahl der Schlüssel-Wert-Paare
Das Obige stellt die Nginx-Quellcode-Studiennotizen (10) – Basiscontainer – ngx_hash vor, einschließlich Aspekten des Inhalts. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.
-