重点: 最重要的'数据结构'之'shared dict'
① 引入
② 数据共享的方式
ngx.ctx和ngx.var区别
1) 第一种是 'nginx' 中的'变量'
备注: 了解'特点'
2) 第二种是'ngx.ctx' --> "重点"
特点:可以在'同一个请求'的'不同阶段之间'共享数据
补充: 'ngx.ctx'的'注意'事项
纠正: '正确'
local ngx = ngx
local function bar()
ngx.ctx.host = 'test.com'
end
3) 第'三种'方法是使用'模块'级别的变量
特点:在同一个 'worker 内'的所有'请求'之间'共享'数据
补充1: 方法'3' 案例'1'讲解
补充2: 方法'3' 案例'2' race condition讲解 --> 'yield操作'
4) 第'四种'用 'shared dict' 来'共享'数据
特点: 这些数据可以在'多个 worker 之间'共享
③ 共享字典概述
④ Shared Dict分类
shared dict 的 API分类: 可以分为下面'三个'大类:
1) 字典'读写'类
2) '队列'操作类
3) '管理'类
⑤ 答疑解惑
1) 实际的'开发'中,我们经常会用到'多级'缓存
2) OpenResty 的'官方'项目中也有'对缓存的封装'
3) 你能找出来是'哪几个项目'吗? 或者你知道一些'其他缓存封装'的 lua-resty 库吗?
思考: `yield`有可能'导致race'?
遗留: 哪些API'比如ngx.sleep'或哪些操作 '比如访问redis'会yield? 相关'参考'文档