重新使用Redigo连接,而不是每次都重新创建连接
连接到Redigo并在函数中操作数据就像黄油一样简单,但问题是当您必须重新使用其连接时,显然是出于性能/实用性的原因 在这样的函数中执行此操作:重新使用Redigo连接,而不是每次都重新创建连接,go,reusability,redigo,Go,Reusability,Redigo,连接到Redigo并在函数中操作数据就像黄油一样简单,但问题是当您必须重新使用其连接时,显然是出于性能/实用性的原因 在这样的函数中执行此操作: func main() { client, err := redis.Dial("tcp", ":6379") if err != nil { panic(err) } defer client.Close() client.Do("GET", "test:1") } 但把它带到外面不会:
func main() {
client, err := redis.Dial("tcp", ":6379")
if err != nil {
panic(err)
}
defer client.Close()
client.Do("GET", "test:1")
}
但把它带到外面不会:
var Client = redis.Dial("tcp", ":6379")
defer Client.Close()
func main() {
Client.Do("GET", "test:1")
}
返回以下错误:
./main.go:1: multiple-value redis.Dial() in single-value context
./main.go:2: non-declaration statement outside function body
我已经尝试将连接作为一个常量(ant),将延迟放在主函数中,但令我失望的是,它没有工作
这是一个更大的问题,因为我有许多其他功能必须与Redis通信,但每次重新创建与Redis的连接似乎都很愚蠢
Redigo API只展示了如何创建拨号实例,但没有进一步解释如何重用它
你可能在我的演讲中迷失了方向,但我想在这里介绍一下上下文,所以我的问题是:如何重新使用(而不是每次重新创建)Redigo连接?最好的方法是使用池,这里简要介绍了池: 全局变量最终不会重用连接,因此我最终得到了类似的结果(如前所述使用池): 例如,如果要在另一个函数中重用池,请按如下方式执行:
func test() {
c := pool.Get()
defer c.Close()
test2,_:=c.Do("HGETALL", "test:2")
fmt.Println(test2)
}
redis.Dial()
方法返回客户端错误。要修复此问题,您应该替换:
var Client = redis.Dial("tcp", ":6379")
与:
var Client, _ = redis.Dial("tcp", ":6379")
为什么不使用redigo池?为什么拨号功能正在调用panic?是否应该由用户决定如何处理错误?@user658991是正确的。拨号功能不应死机。使用
Dial:func()(redis.Conn,error){return redis.Dial(“tcp”,“:6379”)}
No,您不应该这样做,而是应该处理错误,而不是忽略它。
var Client, _ = redis.Dial("tcp", ":6379")