openresty / lua-resty-memcached

Lua memcached client driver for the ngx_lua based on the cosocket API
211 stars 63 forks source link

get slow #6

Closed maczpc closed 11 years ago

maczpc commented 11 years ago

hi,经测试发现get数据非常慢,请问你有遇到过么? 发现都在上百毫米 2013/02/26 11:47:21 [notice] 23797#0: 574 [lua] memca.lua:44: memcached_get(): memcache_get_get: 0.145000 2013/02/26 11:47:21 [notice] 23795#0: 609 [lua] memca.lua:44: memcached_get(): memcache_get_get: 0.168000 2013/02/26 11:47:21 [notice] 23797#0: 255 [lua] memca.lua:44: memcached_get(): memcache_get_get: 0.145000 2013/02/26 11:47:21 [notice] 23795#0: 675 [lua] memca.lua:44: memcached_get(): memcache_get_get: 0.168000 2013/02/26 11:47:21 [notice] 23797#0: 173 [lua] memca.lua:44: memcached_get(): memcache_get_get: 0.149000 2013/02/26 11:47:21 [notice] 23800#0: 704 [lua] memca.lua:44: memcached_get(): memcache_get_get: 0.146000 2013/02/26 11:47:21 [notice] 23798#0: *14 [lua] memca.lua:44: memcached_get(): memcache_get_get: 0.163000

agentzh commented 11 years ago

Hello!

On Mon, Feb 25, 2013 at 8:06 PM, pengcheng notifications@github.com wrote:

hi,经测试发现get数据非常慢,请问你有遇到过么? 发现都在上百毫米

你使用的计时器可能误差很大;请提供你的计时代码。

Best regards, -agentzh

agentzh commented 11 years ago

Hello!

2013/2/25 agentzh agentzh@gmail.com:

你使用的计时器可能误差很大;请提供你的计时代码。

下面是一个运行在我本地(Core i7 2.90GHz CPU + ngx_openresty 1.2.7.1 + LuaJIT 2.0.1)的示例:

local count = 1000
local start = ngx.now()
for i = 1, count do
    local res, flags, err = memc:get("dog")
    if err then
        ngx.log(ngx.ERR, "failed to get dog: ", err)
        return
    end

    if not res then
        ngx.log(ngx.ERR, "dog not found")
        return
    end

    -- ngx.say("dog: ", res)
end
ngx.update_time()
local elapsed = ngx.now() - start
ngx.say("get avg time: ", elapsed / count, " sec")

当 memcached 中存储的 dogs 这个键对应的数据量只有几字节时,得到的典型输出是

get avg time: 1.7200000286102e-05 sec

即 17.2 微秒。

当数据量为 1KB 时,计时结果为

get avg time: 1.8809998035431e-05 sec

即 18.8 微秒。

当数据量为 100KB 时,计时结果为

get avg time: 7.4199998378754e-05 sec

即 74.2 微秒。

当数据量为 900KB 之巨时,计时结果为

get avg time: 0.00042469999790192 sec

也不过 425 微秒(或 0.42 毫秒)。

我不清楚你的上百毫秒是如何计量出来的。

Best regards, -agentzh

agentzh commented 11 years ago

Hello!

On Mon, Feb 25, 2013 at 8:49 PM, agentzh agentzh@gmail.com wrote:

下面是一个运行在我本地(Core i7 2.90GHz CPU + ngx_openresty 1.2.7.1 + LuaJIT 2.0.1)的示例:

local count = 1000

实际测量时,为减少误差,我使用的 count 变量值为十万,即 100000,除了最后一次测试使用了一万,即 10000.

Best regards, -agentzh