一种openresty在init_by_lua_file阶段读取redis到共享内存的方法
前提:
关于 openresty 或者 ngx_lua 请参考:http://openresty.org/en/
问题:
使用openresty读取redis内的数据时,在init_by_lua_file中是不能连接redis的,所以有时候只能在rewrite或者access阶段读取redis数据,用什么办法在初始化阶段读取呢?
【一种openresty在init_by_lua_file阶段读取redis到共享内存的方法】解决办法:
采用在init阶段调用shell命令的方法,相当于在init阶段,执行一个shell命令,读取redis数据,把读取的文本数据进行解析,即可以实现读取redis数据到nginx中
举例:
1 redis中存在一个hash, 存储数据为:
hmsettest_hash f1 v1 f2 v2 f3 v3
2 init_by_lua_file中读取的代码为:
local cmd = "redis-clihgetall test_hash"
local f = io.popen(cmd)
local content = f:read("*a")
f:close()
以上 content中内存即redis中的数据。
需要注意,此处的content是字符串,需要自己重新解析成字典,可以存入变量,也可以存在共享内存中。
推荐阅读
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 你到家了吗
- 闲杂“细雨”
- 杜月笙的口才
- 赢在人生六项精进二阶Day3复盘
- 祖母走了
- 樱花雨
- 眼观耳听美食的日子
- 午门传说
- “成长”读书社群招募