redis简单示例及注意事项

下面小示例是在测试取redis数据,其中使用了连接池和复用长连接操作;

local function get(key)
    local red = redis.new()
    red:set_timeout(1000)
    
    local ok, err = red:connect("127.0.0.1", 6379)
    if not ok then
        ngx.say("get:failed to connect:", err)
        return
    end

    red:select(0) --这里必须强制选择db,否则连接池中的长连接有些是指向其他db的,这是如果复用会导致库指错
    ok, err = red:get(key)
    nlog.dinfo("ok:" .. cjson.encode(ok))
    if not ok then
        ngx.say("get:failed to get:", err)
        red:close()
        return
    end
    red:close()
    
    return
    --[[ok, err = red:set_keepalive(60000, 100)
    if not ok then
        ngx.say("get:failed to get:", err)
        red:close()
        return
    end]]
end
redis_util.get = get

这里注意red:select()操作,再配合使用连接池的时候,必须指定db,因为连接池中部分长连接是设定了定向db,如果程序中不加指定的话,会出现诡异现象取不到数据;

 

posted @ 2017-02-10 11:02  foundwant  阅读(317)  评论(0编辑  收藏  举报