Golang 递增数据到 Redis

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

最佳答案

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

关于Golang 递增数据到 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22004880/

相关文章:

go - 使用ast获取一个函数中的所有函数调用

java - Lua脚本将空数组转换为对象

python - 使用 conda 的 redis 安装不工作 ModuleNotFoundError 没有名为 'redis' 的模块

go - 使用 Redigo 进行 GEOADD 命令

go - redigo golang 客户端是否支持键空间事件通知?

go - 去生成标准输出管道到gofmt到文件

go - 如何通过 json 为 Golang 解码嵌套数组中的对值

google-app-engine - 如果没有小数,Google Cloud Datastore 会将 float 存储为 int,我该如何解析它?

ruby-on-rails - 使用 ruby​​ 创建常用单词或短语列表

go - Redigo:尝试连接到池时无效的内存地址或零指针取消引用