Hello!
On Wed, Oct 24, 2012 at 8:35 PM, nikua wrote:
> 现在貌似只能通过set_keepalive函数连接单个redis server?可以连接多个redis
> server吗,如果某个redis挂掉了之后选择别的存活的连接?
>
出错时,只需在当前 resty.redis 对象上调用 connect() 方法重连另一个不同的 redis server
即可。如果连接池中有空闲连接,connect() 就会直接从连接池中取,而不会新创建连接。
在这里,为了让不同 redis server 的连接都共享一个连接池,需要在每次调用 connect() 方法时都传入自定义的 pool
选项(并赋予完全相同的选项值)。连接池是通过 pool 选项指定的池名称来加以区分的。例如:
red:connect("10.2.168.75", 6379, { pool = "my_redis_pool" })
red:connect("10.2.168.125", 6379, { pool = "my_redis_pool" })
red:connect("10.2.168.3", 6379, { pool = "my_redis_pool" })
这样这三个连接在 set_keepalive() 时都会进入名为 my_redis_pool 的连接池。这里 "my_redis_pool"
这个名字只是一个例子,你可以自己取其他的任意名称,比如 A 这样的,但需要保证它们的名字一致,否则就是不同的连接池了。
resty.redis 对象的 connect() 方法在调用格式上和 ngx_lua 模块的 TCP/stream socket 对象的
connect() 方法是完全相同的,所以调用细节可以参考下面的文档:
http://wiki.nginx.org/HttpLuaModule#tcpsock:connect
Best regards,
-agentzh