Hello!
On Mon, Oct 14, 2013 at 12:03 AM, 朱德江 wrote:
> 我看文档 timeout 是设置最长等待时间,但是我这样用好像没有生效
> 前后两次访问 /t 但是第二个并没有我预期的返回 timeout,而是等第一个 lock free 之后返回 0, nil
>
你的例子在我这里如期望运行了。第一个请求:
$ curl localhost:8080/t
lock: 0, nil
unlock: 1
第二个请求:
$ curl localhost:8080/t
lock: nil, timeout
failed to unlock: unlocked
unlock: nil
只不过第二个请求等了 5 秒才超时,这可能不是你想要的。5 秒是 timeout 选项的默认值。之所以你想设置的 1
秒超时没有生效,是因为你把 timeout 选项传错了地方。见下面:
> content_by_lua '
> local lock = require "resty.lock"
> local lock = lock:new("my_locks")
>
> local elapsed, err = lock:lock("my_key", { timeout = 1 })
timeout 选项是 new() 方法的,而不是 lock() 方法的。见官方文档:
https://github.com/agentzh/lua-resty-lock#new
所以你把 { timeout = 1 } 传给 lock() 方法是“空操作”。
Best regards,
-agentzh