hi all:
很高兴请教大家一个关于lua-resty-redis连接池的问题,情景代码如下:
local redis = require "resty.redis"
local red = redis:new()
red:set_timeout(5000)
local ok, err = red:connect("192.168.6.184", 6379)
local times, err = red:get_reused_times()
ngx.log(ngx.ERR, times)
if not ok then
local msg = "fail to connect:" .. err
FORMAT_RETURN.msg = msg
local value = cjson.encode(FORMAT_RETURN)
ngx.say(value)
ngx.log(ngx.ERR, value)
return
end
--中间调用redis的操作方法
local ok, err = red:set_keepalive(0, 200)
if not ok then
FORMAT_RETURN.msg = "failed to set keepalive: " .. err
local value = cjson.encode(FORMAT_RETURN)
ngx.say(value)
ngx.log(ngx.ERR, value)
return
end
过程很简单,开始建立redis连接,中间redis操作,最后设置连接池;
机器是8核的,nginx.conf中设置worker是8,
问题来了,当我使用ab -n 10000 -c 3200 "http://localhost:8070/book/basic/list?fid=41&bookIds=10162231&filterParams=isMonthly,bookId"测试的时候,redis端的连接数就会超过1600;
同时,我在lua代码中打印了连接池的重用次数;但是log中显示的连接池的次数一直是0;按照官方的解释,就是连接池没有用上。
我想知道我的redis连接池代码有什么问题吗?
还有就是lua-nginx-module#tcpsock的原理是,比如连接池的总大小(worker*poolsize)是1600,如果http的并发超过1600,那么多出来请求就会使用连接池?还是一个http请求只能使用连接池中的一个,然后导致并发量很大的话,连接池就无用了?
还有lua-resty-redis使用lua-nginx-module#tcpsock的连接池,lua-nginx-module#tcpsock的连接池有开关吗?