【问题标题】:Golang Increment data to RedisGolang 将数据增量到 Redis
【发布时间】:2014-02-25 22:46:20
【问题描述】:

我一直在玩 golang 和 redis。我只是建立了一个简单的 http 服务器,并想增加 redis 上的请求。我正在炸毁连接(我认为)。我发现使用 redigo 您可以使用连接池,但不确定当我为请求提供服务时如何在 go 中实现它(您从哪里实例化/调用池)。

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

任何建议都将不胜感激....我确定我错误地建立了连接,但不知道如何更改。

编辑:根据 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))
}

【问题讨论】:

  • 当您编辑原始帖子时,很难说出这些建议指的是什么!我将恢复更正,然后发布此更新代码的要点或新部分以帮助其他人。

标签: go redis redigo


【解决方案1】:

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)
    }
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-31
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 2021-12-13
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多