通过 Golang 对 Redis 操作, 可以通过 Redis 链接池来提升性能,流程如下。
1 事先初始化一定数量的链接,放入到链接池。
2 当 Go 需要操作 Redis 时, 直接从 Redis 链接池取出链接即可。
3 这样可以节省临时获取 Redis 链接的时间,从而提高性能。
二 图解 三 代码package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
// 定义一个全局的pool
var pool *redis.Pool
// 当启动程序时,就初始化连接池
func init() {
pool = &redis.Pool{
MaxIdle: 8, // 最大空闲链接数
MaxActive: 0, // 表示和数据库的最大链接数, 0 表示没有限制
IdleTimeout: 100, // 最大空闲时间
Dial: func() (redis.Conn, error) { // 初始化链接的代码, 链接哪个 ip 的 redis
return redis.Dial("tcp", "localhost:6379")
},
}
}
func main() {
// 先从 pool 取出一个链接
conn := pool.Get()
defer conn.Close()
_, err := conn.Do("Set", "name", "汤姆猫~~")
if err != nil {
fmt.Println("conn.Do err=", err)
return
}
// 取出
r, err := redis.String(conn.Do("Get", "name"))
if err != nil {
fmt.Println("conn.Do err=", err)
return
}
fmt.Println("r=", r)
// 如果要从 pool 取出链接,一定保证链接池是没有关闭
// pool.Close()
conn2 := pool.Get()
_, err = conn2.Do("Set", "name2", "汤姆猫~~2")
if err != nil {
fmt.Println("conn.Do err~~~~=", err)
return
}
// 取出
r2, err := redis.String(conn2.Do("Get", "name2"))
if err != nil {
fmt.Println("conn.Do err=", err)
return
}
fmt.Println("r=", r2)
}
四 测试
r= 汤姆猫~~
r= 汤姆猫~~2