时间:2021-07-01 10:21:17 帮助过:22人阅读
先来看一下hash结构的内存布局:
[cpp] view plaincopyprint?
具体含义还要看图理解。这里不解析代码了,虽然看着繁琐,但是用起来还是相当方便。
一般操作有,创建hash和hash中进行查找。
创建hash:
1.构造一个 ngx_hash_key_t 为成员的数组, 包含 key, value和 使用key计算出的一个hash值
2.构建一个 ngx_hash_init_t结构体的变量, 其中包含了ngx_hash_t的成员, 为hash的结构体, 还包括一些其他初始设置,如bucket的大小,内存池等
3.调用 ngx_hash_init 传入ngx_hash_init_t 结构, ngx_hash_key_t 的数组,和数组的长度,进行初始化,这样 ngx_hash_init_t的hash成员就是我们要的hash结构
查找的过程很简单
1.计算 key 的hash值
2.使用 ngx_hash_find 进行查找,需要同时传入hash值和key ,返回的就是value的指针
需要注意的是,nginx 的 hash 在查找时使用的是分桶后线性查找法,因此当分桶数确定时查找效率同其中的总 key-val 对数量成反比
以上就介绍了nginx 源码学习笔记(十)——基本容器——ngx_hash,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。