nginx +lua 连接redis

Nginx访问把url的参数,ua信息,客户端ip,时间等 拼接成字符串 1k大小 写入redis队列

lua代码:

if ngx.var.args==nil then
	return
end
local redis = require "resty.redis"
local red = redis:new()

red:set_timeout(1000) -- 1 sec

local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
    ngx.say("failed to connect: ", err)
    return
end

ok, err = red:lpush("test_list", ngx.var.args .. "||" .. ngx.var.remote_addr .. "||" .. ngx.var.http_user_agent .. "||" .. os.time())
if not ok then
    ngx.say("failed to set cat: ", err)
    return
end
ngx.say(ok)

-- put it into the connection pool of size 100,
-- with 10 seconds max idle time
local ok, err = red:set_keepalive(60000, 10)
if not ok then
    ngx.say("failed to set keepalive: ", err)
    return
end


nginx +lua 连接redis_第1张图片

服务器用的 openresty-1.13.6.1,用ab压测每秒4w多

刚开始准备用来做日志收集实时写入redis,再用程序从redis里取出来解析后存入elasticsearch是数据实时查询,后来发现nginx的access_log 可以直接写入rsyslog,rsyslog性能更好还有多种输出(如redis,kafka,hadoop hdfs等)也就放弃了。

但是作为nginx模块性能还是不错的,做一些简单的限流,黑名单ip等应该是不错的选择。

你可能感兴趣的:(nginx +lua 连接redis)