通过 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