Golang将数据增加到Redis

时间:2014-02-25 04:50:14

标签: go redis redigo

我一直在玩golang和redis。我只是站起来一个简单的http服务器,想在redis上增加请求。我正在炸毁这些联系(我想)。我发现使用redigo你可以使用连接池,但不知道如何在我提供请求时(在哪里实例化/从中调用池)实现。

错误:无法分配请求的地址。

任何建议都会受到赞赏....我确信我错误地建立了连接,但不确定如何更改。

编辑:根据pauljz的建议进行修改 - 现在效果很好

    var pool redis.Pool

    func qryJson(rw http.ResponseWriter, req *http.Request){

        incrementRedis()
    }

    func incrementRedis () {

    t := time.Now().Format("2006-01-02 15:04:05")
    conn := pool.Get()
    defer conn.Close()
    if _, err := conn.Do("HINCRBY", "messages", t, 1); err != nil {
        log.Fatal(err)

    }


    }

func main() {
    runtime.GOMAXPROCS(runtime.NumCPU())
    pool = redis.Pool{
            MaxIdle: 50,
            MaxActive: 500, // max number of connections
            Dial: func() (redis.Conn, error) {
                    c, err := redis.Dial("tcp", ":6379")
                    if err != nil {
                            panic(err.Error())
                    }
                    return c, err
            },
    } 
    http.HandleFunc("/testqry", qryJson)
    log.Fatal(http.ListenAndServe(":8082", nil))
}

2 个答案:

答案 0 :(得分:4)

redigo文档有一个很好的连接池初学者示例:http://godoc.org/github.com/garyburd/redigo/redis#Pool

在你的情况下,你的包中会有var pool redis.Pool(即不在函数内)。

main()ListenAndServe来电之前,您可以从redigo示例中调用pool = redis.Pool{ ... }来初始化游戏池。

incrementRedis()中,您可以执行以下操作:

func incrementRedis () {
    conn := pool.Get()
    defer conn.Close()
    if _, err := conn.Do("HINCRBY", "messages", t, 1); err != nil {
        log.Fatal(err)
    }
}

答案 1 :(得分:3)

在您的代码中,您为每个http请求创建与redis的连接。使用全局变量来存储连接的redis连接并重用它。