Hello!
2014-12-23 1:12 GMT-08:00 韦启蒙:
> 现在我有些不懂的地方想请教下:
> 1) 我理解这些接口是基于tcp连接中,你文章的例子中这些接口用在 server{ location 下,如下所示:
> 我的需求是:在nginx启动的时候就查询并设置一些信息到redis(例如在 http { 下),请问如何做到呢
> server {
>
> location /test {
> content_by_lua '
> local redis = require "resty.redis"
> local red = redis:new()
>
待 init_by_lua 支持 cosocket API 之后,你就可以在 init_by_lua 里面使用
lua-resty-redis 来做到这一点。在此之前有两种选择:
1. 在你的 nginx 启动脚本中(一般是 shell 脚本)里完成 redis 操作,即在 nginx 之外进行这种初始化操作;
2. 在 init_by_lua 里面使用阻塞的第三方 lua redis 库。(在此上下文中使用阻塞 IO 是无害的。)
>
> 2、如下嵌套使用在大并发时候是否存在隐患
> local red = redis:new()
> red:set_timeout(1000)
> red:connect("127.0.0.1", 6379)
> ok, err = red:set("dog", "an animal")
> local red1 = redis:new()
> red1:set_timeout(1000)
> red1:connect("127.0.0.1", 6379)
> ok, err = red1:set("cat", "an animal")
> local ok, err = red1:set_keepalive(10000, 100)
> local ok, err = red:set_keepalive(10000, 100)
>
这里不过同时创建了两个 redis 这接而已。我不明白你说的大并发下的隐患具体是指什么。我没有看出大的问题。
对于你这里的例子,既然,red 在 red1 创建之前就不再使用了,则应该尽早地通过 set_keepalive()
方法将其连接放回到连接池供其他请求复用。当然,你这里的例子,red 和 red1 都同时访问的一个 redis 服务器,完全可以复用同一个
resty.redis 对象实例。
另外,建议加入 openresty 中文邮件列表讨论这样的问题。细节请见 http://openresty.org/#Community 谢谢合作!
同时抄送给该列表。
Regards,
-agentzh