Hello!
2014-04-22 2:14 GMT-07:00 小冶:
> 就这么创建了一个db,然后存到ngx.ctx.db上,以后每次有数据收发都对它操作一下,但是一段时间后操作就出错,返回的是closed。
> 这个是openresty本身就设计成这样,还是我自己代码里哪里搞错了?
>
如果你的 redis 连接尚未放入连接池就被关闭了,一般有两种可能:
1. 返回 closed 错误的操作之前的那个操作出现了其他的错误,resty.redis 对象自动关闭了当前连接。请确认你对所有的
redis 操作都进行了恰当的错误处理。
2. 你在连续两次使用同一个 resty.redis 对象之间的延时过长,超过了 redis 服务器端的 redis.conf
配置文件里的“timeout N”配置指令里的 N 秒限制,于是 redis 服务器主动关闭了连接。在此种情况下,你可以在 redis
一侧配置 timeout 0 以便让 redis 永远不主动关闭空闲了很多的连接。或者如果业务逻辑允许的话,你在短期内不会使用
resty.redis 对象的时候将之立即放入连接池,以便其他并发的请求可以复用该连接,后面你再需要访问 redis 时再重新调用
connect() 方法从连接池里取(如果取不到的话,再新建一个连接到 redis 服务器)。
Regards,
-agentzh