nginx_hash表

typedef struct {   //hash元素结构
    void *value;  //value,即某个key对应的值,即<key,value>中的value
    u_short len;  //name长度
    u_char  name[1]; //某个要hash的数据(在nginx中表现为字符串),即<key,value>中的key
} ngx_hash_elt_t;

typedef struct {   //hash结构
    ngx_hash_elt_t  **buckets; //hash桶(有size个桶)
    ngx_uint_t  size;   //hash桶个数
} ngx_hash_t;

typedef struct {   //hash初始化结构
    ngx_hash_t  *hash;   //指向待初始化的hash结构
    ngx_hash_key_pt  key;   //hash函数指针
    
    ngx_uint_t    max_size;   //bucket的最大个数
    ngx_uint_t    bucket_size;   //每个bucket的空间
    
    char *name;    //该hash结构的名字(仅在错误日志中使用)
    ngx_pool_t  *pool;   //该hash结构从pool指向的内存池中分配
    ngx_pool_t *temp_pool;   //分配临时数据空间的内存池
} ngx_hash_init_t;  //用于初始化hash

typedef struct {    //hash key结构
    ngx_str_t   key;   //key, 为nginx的字符串结构
    ngx_uint_t key_hash;   //由该key计算出的hash值(通过hash函数如ngx_hash_key_1c())
    void *value;  //该key对应的值,组成一个键-值对<key,value>
} ngx_hash_key_t;

1) hash初始化
    hash初始化由ngx_hash_init()函数完成,其names参数是ngx_hash_key_t结构的数组,
即键-值对<key,value>数组,nelts表示该数组元素的个数。因此,在调用该函数进行初始化
之前,ngx_hash_key_t结构的数组是准备好的,如何使用,可以采用nginx的ngx_array_t结构。

    该函数初始化的结果就是将names数组保存的键-值对<key,value>,通过hash的方式将其
存入相应的一个或多个hash桶(即代码中的buckets)中,该hash过程用到的hash函数一般为
ngx_hash_key_1c等。hash桶里面存放的是ngx_hash_elt_t结构的指针(hash元素指针),
该指针指向一个基本连接的数据区。该数据区中存放的是经hash之后的键-值对<key', value'>,
即ngx_hash_elt_t结构中的字段<name, value>。每一个这样的数据区存放的键-值对<key', value'>
可以是一个或多个。

转载:https://www.cnblogs.com/Z465360621/articles/3964500.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值