2012/5/2 wave2050@gmail.com <wave2050@gmail.com>:
>
> HttpRedis2Module 模块里,通过 ngx.location.capture
> 来调用。现在有一个问题,我要之类类似:“zadd a 1 'a b
> c'”的命令,在命令行下是可以的,但是在NGINX里面会返回,命令参数不对,主要是KEY中存在空格
这算是一个 FAQ 了,呵呵。
因为你使用的 redis-cli 工具自己定义了一套命令行语法,而这套语法与 redis 线路协议无关。所以把 redis-cli
的文本界面直接照搬到 ngx_redis2 或者其他 redis 客户端库是没有意义的。
在 ngx_redis2 中,直接使用类似这样的配置指令记法就可以了:
redis2_query zadd a 1 'a b c';
如果你想使用 redis2_raw_query 或者 redis2_raw_queries 指令,则需要使用 redis 传输协议中规定的记法:
http://redis.io/topics/protocol
或者借助于 lua-redis-parser 这样的 Lua 库来替你自动生成原始的 redis 请求串:
https://github.com/agentzh/lua-redis-parser
当然,如果你使用 Lua 的话,推荐使用 lua-resty-redis 库,它比子请求访问 ngx_redis2 模块要更高效更灵活一些:
https://github.com/agentzh/lua-resty-redis
Best regards,
-agentzh
P.S. 我同时抄送给 openresty
邮件组,这样更多人可以看到我们在这里的讨论:https://groups.google.com/group/openresty/
我也建议你加入这个列表组交流各种 openresty 和 nginx 相关的问题。