发现一个情况,在init_by_lua中定义的非local的worker内全局变量,在处理http请求的协程中可以访问,但是并不能改变其内容,版本号:nginx version: openresty/1.7.2.1,
依稀记的之前的版本是可以的,只是不推荐这种用法而已。
那如果确实如此的话,对实时会更改的全局内容,就只能存到共享内存dict中,可能会有这样的问题:
1.访问共享内存dict是有加锁的,感觉应该尽量少调用才比较好
2.共享内存dict对存储的数据类型有限制,不能存table之类。比如在这个场景下,就会比较吃力:定期从其他服务器拉一个ip黑名单列表,在黑名单列表中的请求ip就不往后面走了,否则继续后续操作。本来是以table的形式保存在 nginx worker自己的内存中比较好,然后定时更新。但现在必须以字符串的形式放到共享内存dict中,每次收到http请求,需要从共享内存中把这串字符读出来 ,解析,然后判断请求ip是否在这个黑名单列表中。感觉会比较复杂
想问的是:是不是真的不能定义这种可以在某个http请求协程中更新的全局变量?如果可以,是要怎么定义?不可以的话,有没有什么更好的办法来实现上说的那个黑名单的需求,盼各位大神给力作答,谢谢