首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将mysql表数据加载到全局范围,供openresty/nginx中的所有web请求使用

问如何将mysql表数据加载到全局范围,供openresty/nginx中的所有web请求使用
EN

Stack Overflow用户
提问于 2022-01-05 04:04:54
回答 2查看 121关注 0票数 0

我刚刚进入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查询每分钟刷新它来提高效率。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2022-01-07 00:16:39

您可以使用ngx.shared.DICT缓存来自多个nginx进程的数据。检查正式文件如何使用它存储数据。在这个数据库中存储数据应该首先将数据序列化为string。

票数 0
EN

Stack Overflow用户

发布于 2022-01-08 15:49:36

数据共享-内部-nginx-工作者

因此,您可以创建一个Lua模块并在这个模块中共享您的表。

记住--这对每个工人都是有效的。

您应该在init_worker_by_lua_block中启动一个计时器来定期轮询数据库服务器。

我不建议将一个员工用于投票--您可能会对员工之间的同步表感到头疼。每个工人每分钟一次海事组织是可以接受的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70587682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档