首頁 > 後端開發 > php教程 > nginx 原始碼學習筆記(十)-基本容器-ngx_hash

nginx 原始碼學習筆記(十)-基本容器-ngx_hash

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2016-07-29 09:10:54
原創
874 人瀏覽過

ngx_hash.{c|h}實現了nginx裡面比較重要的一個hash結構,這個在模組配置解析裡常被用到。這個hash結構是唯讀的,僅在初始創建時可以給出保存在其中的key-val對兒,然後就只能進行「增刪改查」操作了。

先來看看hash結構的記憶體佈局:

nginx 源码学习笔记(十)——基本容器——ngx_hash

[cpp] view plaincopyprint?

  1. typedef struct {                
  2. //指要初始化的雜湊結構
  3.           //為計算散列值用的函數指針
  4.     
  5.     ngx_uint_t        max_size;               //允許的最大bucket數量
  6.       ngx_uint_t        bucket_size;             //為每個bucket允許佔用的最大空間
  7.     
  8.     char
  9.              *name;                 //初始化的散列名稱(盡在錯誤日誌中使用)      ngx_pool_t       *pool;                   //用於分配雜湊結構空間的記憶體池
  10.       ngx_pool_t         
  11. } ngx_hash_init_t;                還要看圖片理解。這裡不解析程式碼了,雖然看著繁瑣,但用起來還是相當方便。 一般操作有,創建hash和hash中進行查找。
  12. 創建hash:
  13. 1.構造一個ngx_hash_key_t 為成員的數組,包含key, value和使用key計算的一個hash值
  14. 2. 建立一個ngx_hash_init_t結構的變量,包含了一個結構的成員,hash_t hash的結構體,也包括一些其他初始設置,如bucket的大小,內存池等
3.調用ngx_hash_init 傳入ngx_hash_init_t 結構,ngx_hash_key_t 的數組,和數組的長度,進行初始化,這樣我們的組要的hash結構

查找的過程很簡單

1.計算key 的hash值

2.使用ngx_hash_find 進行查找,需要同時傳入hash值和key ,返回的就是value的指針

需要注意的是,nginx 的hash 在查找時使用的是分桶後線性查找法,因此當分桶數確定時查找效率同其中的總key-val 對數量成反比

以上就介紹了nginx 原始碼學習筆記(十)——基本容器——ngx_hash,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
javascript - js正規符合特定字串
來自於 1970-01-01 08:00:00
0
0
0
為什麼說非物件呼叫成員函數fetch()
來自於 1970-01-01 08:00:00
0
0
0
資料庫設定檔必須要用二維數組
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板