或者把黑名单url当作模块里的变量,在 require 的时候初始化。
因为 lua 模块会被缓存,所以能够保证只被调用一次。
不过这么一来,require 的时候就会有副作用,另外只能在支持 cosocket 的阶段 require。
在 2017年4月11日星期二 UTC+8上午10:10:10,Kwanhur Huang写道:
hello,
方案1、结合标识位+lua-resty-lock,在rewrite_by_lua 做一次调用
方案2、结合luasocket+MySQL Proxy 在init_by_lua 做一次调用
背景: 我想实现一个判断url是否在黑名单中的应用,
算法使用的是bloom filter;
问题:
那么就涉及到初始化的时候,需要从mysql读取所有的黑名单中的url,加到
bloom filter中去。由于这个操作只需要做一次,所以我希望在初始化的时候调用一次;
比如自定义lua模块如下:
-- bf.lua
local _M = {}
function _M:Init()
-- 这里初始化操作,用到了lua-resty-mysql
-- 从数据库读数据
do init work
end
return _M
我希望在nginx初始化的时候
local = require "bf"
bf.Init()
中提到不能在 init_by_lua* 中使用。
所以我想请教一下大家有推荐的方案么,谢谢!
--