nginx高级数据类型(4) - 键值对、散列键值对、散列表

键值对

ngx_keyval_t 是一个简单的键值对,主要用来存储配置文件里成对出现的配置,一般会配合 ngx_array_t 来存储多个键值对。

// key-value结构体,用于解析配置文件里的数据
typedef struct {
    ngx_str_t   key;        // key
    ngx_str_t   value;      // value
} ngx_keyval_t;

散列键值对

// 键值对结构, 主要用来表示HTTP头部信息
typedef struct {
    ngx_uint_t        hash;         //散列(哈希)标记
    ngx_str_t         key;          //键
    ngx_str_t         value;        //值
    u_char           *lowcase_key;  //key的小写字符串指针
} ngx_table_elt_t;

ngx_table_elt_t 主要是用来表示 http 头部信息,例如 "Server: nginx",key 对应 Server,value 对应 nginx 。hash 是散列值,使用它可以在散列表结构里快速查找数据。

// 简单地对单个字符计算散列
#define ngx_hash(key, c)   ((ngx_uint_t) key * 31 + c)

// 计算散列值
ngx_uint_t ngx_hash_key(u_char *data, size_t len);

// 小写后再计算hash
ngx_uint_t ngx_hash_key_lc(u_char *data, size_t len);

// 小写化的同时计算出