问题:这两种引用的区别
local xxx = require('xxx')
require('xxx')
原因分析:
nginx的全局变量生命周期是和请求的生命周期一致,每个子请求有自己的全局变量。xxx模块是在第一次请求时会被初始化并缓存在内置的package.loaded表中,方便后续引用。全局变量将在请求结束时被清空,当子请求在访问全局变量xxx时因为xxx不在当前的全局变量中而报访问空对象异常。
如何处理:
使用local方式来定义变量,如需要worker之前进行数据交换,使用以下方法来解决:
1、使用共享变量--ngx.shared.DICT
2、使用单worker、单服务方式(cpu存在浪费,多核cpu只能用一个)
3、使用memcache、redis等数据存储