今天我尝试使用stream-lua来代理redis
并根据key动态负载均衡到后端的redis
我写了content_by脚本,其中iread为读取redis协议数据的方法 newskt为创建一个连接到reids的tcp协议连接
local reqsocket = assert(ngx.req.socket(true))
local data,err = iread(reqsocket)
ngx.log(ngx.ERR,'\n-\nreq|',data,'|')
if data then
local c = newskt()
c:send(data)
local r = iread(c)
if r then
c:setkeepalive()
end
ngx.log(ngx.ERR,'\n-\nres|',r,'|')
reqsocket:send(r)
else
reqsocket:send(err)
end
使用命令行测试,没有任何问题redis-cli -h 127.0.0.1 -p 8100
可以get也可以set,也不会断开连接
但是使用redis-benchmark就有问题了
redis-benchmark -h 127.0.0.1 -p 8100 -c 1 -n 2 -t set
只要-n参数大于1就会报错
Error: Server closed the connection
但是如果使用-k参数指定只用短连接就不会有问题
redis-benchmark -h 127.0.0.1 -p 8100 -c 1 -n 2 -t set -k 0
order to use a lot of clients/requests
====== SET ======
2 requests completed in 0.00 seconds
1 parallel clients
3 bytes payload
keep alive: 0
100.00% <= 0 milliseconds
2000.00 requests per second
在stream-lua中使用send会关闭连接吗.又或者是其他原因造成的呢.