首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重用Redigo连接,而不是每次都重新创建它

重用Redigo连接,而不是每次都重新创建它
EN

Stack Overflow用户
提问于 2014-06-24 13:01:48
回答 2查看 13.6K关注 0票数 7

连接到Redigo并在函数中操作数据就像黄油一样简单,但是当您必须重用它的连接时,问题就出现了,这显然是出于性能/实用的原因。

在这样的函数中这样做是可行的:

代码语言:javascript
复制
func main() {

    client, err := redis.Dial("tcp", ":6379")
    if err != nil {
        panic(err)
    }
    defer client.Close()

    client.Do("GET", "test:1")
}

但把它带到外面并不是:

代码语言:javascript
复制
var Client = redis.Dial("tcp", ":6379")
defer Client.Close()

func main() {

        Client.Do("GET", "test:1")
    }

返回以下错误:

代码语言:javascript
复制
./main.go:1: multiple-value redis.Dial() in single-value context
./main.go:2: non-declaration statement outside function body

我尝试将连接作为一个const(ant),将 tried 放在主函数中,这让我感到失望的是,它也没有工作。

这是一个更大的关注,因为我有许多其他功能,必须与Redis沟通,但重新建立与Redis的连接,每次似乎是愚蠢的。

Redigo只是展示了如何创建一个拨号实例,但并没有进一步解释如何重用它。

你可能在我的演讲中迷失了方向,但我想在这里加入一些背景,所以我明确而简洁的问题是:你如何重复使用(而不是每次都重新创建)一个Redigo连接?

EN

回答 2

Stack Overflow用户

发布于 2014-06-24 13:57:16

最好的方法是使用池,这里简要地记录了这些池:Redigo池

全局变量最终不会重用连接,因此我最终得到了类似的结果(如前面提到的那样使用池):

代码语言:javascript
复制
func newPool() *redis.Pool {
return &redis.Pool{
            MaxIdle: 80,
            MaxActive: 12000, // max number of connections
            Dial: func() (redis.Conn, error) {
                    c, err := redis.Dial("tcp", ":6379")
                    if err != nil {
                            panic(err.Error())
                    }
                    return c, err
            },
    } 

}

var pool = newPool()

func main() {

        c := pool.Get()
        defer c.Close()

        test,_:=c.Do("HGETALL", "test:1")
        fmt.Println(test)
}

例如,如果您想在另一个函数中重用一个池,您可以这样做:

代码语言:javascript
复制
func test() {
        c := pool.Get()
        defer c.Close()

        test2,_:=c.Do("HGETALL", "test:2")
        fmt.Println(test2)
}
票数 21
EN

Stack Overflow用户

发布于 2016-05-27 02:11:29

redis.Dial()方法返回客户端错误。要修复它,您应该替换:

代码语言:javascript
复制
var Client = redis.Dial("tcp", ":6379") 

通过以下方式:

代码语言:javascript
复制
var Client, _ = redis.Dial("tcp", ":6379")
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24387350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档