nginx 变量的保存结构和优化

在使用nginx lua 时经常会使用ngx.var.varname 来获取变量,随着业务的越复杂,变量越来越多,发现服务的速度明显变慢了
本文分析了整个变量的获取和保存逻辑
  1. ngx_lua 获取变量

首先ngx_lua 获取变量调用的是 ngx_http_lua_var_get(lua_State *L)

46-static int
 47ngx_http_lua_var_get(lua_State *L)
 48{
 49    ngx_http_request_t          *r;
 50    u_char                      *p, *lowcase;
 51    size_t                       len;
 52    ngx_uint_t                   hash;
 53    ngx_str_t                    name;
 54    ngx_http_variable_value_t   *vv;
 55
 56#if (NGX_PCRE)
 57    u_char                      *val;
 58    ngx_uint_t                   n;
 59    LUA_NUMBER                   index;
 60    int                         *cap;
 61#endif
 62
 63    r = ngx_http_lua_get_req(L);
 64    if (r == NULL) {
 65        return luaL_error(L, "no request object found");
 66    }
 ...
 111    p = (u_char *) lua_tolstring(L, -1, &len);
112
113    lowcase = lua_newuserdata(L, len);
114
115    hash = ngx_hash_strlow(lowcase, p, len);
116
117    name.len = len;
118    name.data = lowcase;
119    dd("variable name: %.*s", (int) len, lowcase);
120    vv = ngx_http_get_variable(r, &name, hash);

可见就是调用nginx的变量获取接口, 可以看到前面将变量名全部变为小写然后计算hash,ngx_lua是不区分大小写的

  1. nginx 变量的获取
546-ngx_http_variable_value_t *
 547ngx_http_get_variable(ngx_http_request_t *r, ngx_str_t *name, ngx_uint_t key)
 548{
 549    ngx_http_variable_t        *v;
 550    ngx_http_variable_value_t  *vv;
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值