nginx -cache loader process 进程分析

本文深入探讨了nginx中的cache loader process进程。该进程在启动后1分钟自动触发,负责遍历proxy_cache_path配置的缓存文件,重建索引元数据。通过遍历红黑树和队列,为每个缓存文件创建或更新ngx_http_file_cache_node_t结构。此过程涉及多个结构和函数,包括ngx_path_t、ngx_http_file_cache_node_t、ngx_cache_manager_ctx_t等,确保缓存管理的有效性。
摘要由CSDN通过智能技术生成

本文主要对nginx的cache loader process 进程进行分析,并进行记录。

事实真相:

在nginx启动1分钟之后,会启动一个名为cache loader process的进程,该进程运行了一段时间之后,该进程就会结束消失。

在该进程运行期间主要做了以下事情:遍历配置文件中proxy_cache_path命令指定的路径中的所有的缓存文件,并且针对遍历到的各个缓存文件的MD5编码先遍历红黑树和相应的ngx_http_file_cache_node_t节点,如果不存在就创建新的ngx_http_file_cache_node_t,并将该对象中的rbnode和queue分别插入到红黑树和过期队列;如果存在,则更新相应的属性。

通过上述操作,完成根据缓存文件进行索引数据的重建工作。

下面对该过程进行详细研究:

1.      结构先行

保存了当前cache的一些信息,包含managerloader函数指针和传入数据地址

(1) ngx_path_t;

typedef struct {

    ngx_str_t                  name;

    size_t                     len;

    size_t                     level[3];

    ngx_path_manager_pt        manager;

    ngx_path_loader_pt         loader;   //cache loader的函数指针,在运行cache loader进程的时候通过该函数完成索引元数据的重建

    void                      *data;

    u_char                    *conf_file;

    ngx_uint_t                 line;

} ngx_path_t;

(2)ngx_http_file_cache_node_t

一个缓存数据对应一个ngx_http_file_cache_node_t结构

typedef struct {

    ngx_rbtree_node_t                node;//缓存文件对应的红黑树节点

    ngx_queue_t                      queue;//队列

//cache_key 12=16cache_key-4rbt_key

    u_char                          key[NGX_HTTP_CACHE_KEY_LEN

                                         -sizeof(ngx_rbtree_key_t)];

    unsigned                         count:20; //引用计数

    unsigned                         uses:10;//多少请求在使用

    unsigned                         valid_msec:10;

    unsigned                         error:10;//状态

    unsigned                         exists:1;//是否存在对应的cache文件

    unsigned                         updating:1;//是否在更新

                                     /* 12unused bits */

 

    ngx_file_uniq_t                  uniq;//文件的uniq

    time_t                           expire;//失效时间

    time_t                           valid_sec;//max-age

   

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值