我刚刚进入openresty/lua/nginx,而且我对nginx/openresty宇宙中的全局范围并不十分清楚。
我希望每分钟将一个包含大约1000条记录(一列)的mysql表加载到“内存”(作为数组或地图),并让content_by_lua_block中的所有请求都能读取数据。
该表包含一个单独的行,这是一个唯一的“会话”。我希望每分钟刷新一次表(通过在主线程中执行mysql查询),并允许web请求通过content_by_lua_block访问/搜索数组。
为了进一步解释,会话数据将从mysql主服务器复制到openresty服务器。它包含原始服务器上所有登录用户的会话cookie。openresty/nginx信任检查请求中指定的cookie是否是有效的会话cookie (通过在我们拉来的“内存”表中查找它),并根据会话cookie是否有效为请求提供服务。
我已经在对每个请求执行mysql连接+查询,并根据是否传递有效的会话cookie来提供内容,但我想看看是否有可能通过将所有会话数据保存在内存中并通过mysql查询每分钟刷新它来提高效率。
谢谢!
发布于 2022-01-07 00:16:39
您可以使用ngx.shared.DICT缓存来自多个nginx进程的数据。检查正式文件如何使用它存储数据。在这个数据库中存储数据应该首先将数据序列化为string。
发布于 2022-01-08 15:49:36
因此,您可以创建一个Lua模块并在这个模块中共享您的表。
记住--这对每个工人都是有效的。
您应该在init_worker_by_lua_block中启动一个计时器来定期轮询数据库服务器。
我不建议将一个员工用于投票--您可能会对员工之间的同步表感到头疼。每个工人每分钟一次海事组织是可以接受的。
https://stackoverflow.com/questions/70587682
复制相似问题