作者回复: 是的,本来想写的是:
local ngx_ctx = ngx.ctx
作者回复: 有什么报错吗?ngx.ctx 是可以在 access 阶段使用的
作者回复: 是的
作者回复: 其他的方式就是借助外部的储存了,比如 memcached 扥。
ngx.ctx 的快是相对于 ngx.var 而言的。
多谢补充,ngx.ctx 确实不能跨 location,有一个库 lua-resty-ctxdump 可以解决这个问题。
作者回复: 1. 是的,ngx.var 的生命周期和请求一致,请求结束它也就消失了。它的优势是数据可以在 C 模块和 Lua 代码中传递。
2. 原文中没有提到 ngx.ctx 是昂贵的操作吧?可能是我没有表达清楚,是我们会用 ngx.ctx 来替代 ngx.var 这种昂贵的操作,后者才是昂贵的。
3. 两个操作之间有 `yield 操作`,可能出现竞争,而不是`阻塞操作`,有阻塞操作是不会出现竞争的。只要不把主动权交给 Nginx 的事件循环,就不会有竞争。
作者回复: 有些是共享字典,有些是 lrucache
作者回复: 你在 ngx.balancer 的 set_current_peer 时,保存下上游的节点信息?
作者回复: 1.15.8 这个最新版本中,默认已经提高了,支持了 64 位