一 点睛

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