我在redis.lua中启动 Redis 连接池,通过从 C 调用,我得到 a redis_lua_state
,这个 Lua 状态是全局启动一次,其他线程只能从中获取。
当有一个 HTTP 请求(工作线程)时,我需要从中获取一个 redis 连接redis_lua_state
,然后新建另一个 Lua 状态以加载其他 Lua 脚本,这些脚本将使用这个 redis 连接与 Redis 通信,如何做到这一点?或者如何设计我的 Lua 脚本使其变得简单?
代码示例:
/* on main thread, to init redis pool connection */
lua_State *g_ls = NULL;
lua_State *init_redis_pool(void) {
int ret = 0;
g_ls = luaL_newstate();
lua_State *ls = g_ls;
luaL_openlibs(ls);
ret = luaL_loadfile(ls, "redis.lua");
const char *err;
(void)err;
/* preload */
ret = lua_pcall(ls, 0, 0, 0);
lua_getglobal(ls, "init_redis_pool");
ret = lua_pcall(ls, 0, 0, 0);
return ls;
}
/* worker thread */
int worker() {
...
lua_State *ls = luaL_newstate();
ret = luaL_loadfile(ls, "run.lua");
/* How to fetch data from g_ls? */
...
lua_getglobal(ls, "run")
ret = lua_pcall(ls, 0, 0, 0)
lua_close(ls);
...
return 0;
}