您的位置:首页 > 编程语言 > Go语言

redigo长连接/复用

2016-02-01 00:56 441 查看
Connecting to Redigo and manipulating data inside a function is easy like butter, but the problem comes when you have to re-use
its connection, obviously for performance/practicality reasons.

 How
do you go about re-using (not recreating everytime) a Redigo connection?


最佳答案:

The best way turned out to be using Pools, which are briefly documented here: Redigo
Pools.

A global variable won't eventually reuse a connection, so I ended up with something like this (using Pools as noted before):
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)
}


If for example you want to reuse a pool inside another function you do it like this:
func test() {
c := pool.Get()
defer c.Close()

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


###########
https://github.com/garyburd/redigo/blob/ee4f539b48a64737dd7a991cdebf1cb367ddb7fb/redis/pool_test.go
############
https://github.com/garyburd/redigo/issues/104 https://github.com/garyburd/redigo/issues/114
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: