Re: 关于lua-resty-redis,Select库问题

161 views
Skip to first unread message

liu...@mochui.net

unread,
Apr 8, 2014, 11:58:36 AM4/8/14
to open...@googlegroups.com, 956...@qq.com
在 2013年5月20日星期一UTC+8下午4时28分07秒,956...@qq.com写道:
> 想请教下该驱动下,如何select不同的库,官方驱动如下:
>
>
>
> package.path = "../src/?.lua;src/?.lua;" .. package.path
>
> pcall(require, "luarocks.require")
>
> local redis = require 'redis'
>
> local params = {
>
> host = '10.20.17.123', --Host
>
> port = 6379, --Port
>
> }
>
> local client = redis.connect(params)
>
> client:select(1) --例如这里
>
> client:set('foo', 'bar')
>
> local value = client:get('foo')
>
> local test1=client:get('pwd');
>
> print('get from redis :',value,test1)
>
>
>
> 如果使用lua-resty-redis,该如何实现?

今天遇到与你类似的问题,发现了你的帖子。
经过拜神,得到如下解决方案,特此分享。
local redis = require "resty.redis";

redis.add_commands("select");
local red = redis:new();
red:set_timeout(1000);
local ok, err = red:connect("127.0.0.1", 6379);
...

red:select(0);
local res, err = red:get("bbb");
...

red:select(2);
local res, err = red:get("aaa");
...

red:set_keepalive(10000, 100);

liu...@mochui.net

unread,
Apr 8, 2014, 11:59:41 AM4/8/14
to open...@googlegroups.com, 956...@qq.com
在 2013年5月20日星期一UTC+8下午4时28分07秒,956...@qq.com写道:
> 想请教下该驱动下,如何select不同的库,官方驱动如下:
>
>
>
> package.path = "../src/?.lua;src/?.lua;" .. package.path
>
> pcall(require, "luarocks.require")
>
> local redis = require 'redis'
>
> local params = {
>
> host = '10.20.17.123', --Host
>
> port = 6379, --Port
>
> }
>
> local client = redis.connect(params)
>
> client:select(1) --例如这里
>
> client:set('foo', 'bar')
>
> local value = client:get('foo')
>
> local test1=client:get('pwd');
>
> print('get from redis :',value,test1)
>
>
>
> 如果使用lua-resty-redis,该如何实现?

顺便赞一下春歌的这个泡妞功能:)

Yichun Zhang (agentzh)

unread,
Apr 9, 2014, 1:07:08 AM4/9/14
to openresty
Hello!

2013-05-20 1:28 GMT-07:00 9565642:
> 想请教下该驱动下,如何select不同的库,官方驱动如下:
>
> package.path = "../src/?.lua;src/?.lua;" .. package.path

不要在你每请求的 Lua 处理程序里对 package.path 进行内容追加。因为 package.path 是 VM
级别的结构,所以每执行一个请求,你的 packpage.path 就会更长一些,直至抛出 no memory 异常,是典型的内存泄漏问题。

建议使用 ngx_lua 模块的 lua_package_path 配置指令:

https://github.com/chaoslawful/lua-nginx-module#lua_package_path

> 今天遇到与你类似的问题,发现了你的帖子。
> 经过拜神,得到如下解决方案,特此分享。
> local redis = require "resty.redis";
>
> redis.add_commands("select");
>

select 命令是 lua-resty-redis 默认就有的。我很奇怪为什么你要使用 add_commands()
自己添加。我本地测试也是可以直接工作的,见下面这个测试用例:

https://github.com/agentzh/lua-resty-redis/blob/master/t/sanity.t#L27

难道你的 lua-resty-redis 库版本太老了?

Regards,
-agentzh
Reply all
Reply to author
Forward
0 new messages