我们都知道,在程序开发中,网络链接的开销是比较大的, 当我们在链接redis 时,如果是操作一次就执行一次DIal拨号,那性能是很低的,redis的效率瞬间就被你降低了50%, 提速redis使用性能的第一步就是使用连接池技术,废话不多说,直接上代码:

(图片来源网络,侵删)
package main import ( "fmt" "Github.com/gomodule/redigo/redis" ) // 定义全局变量 var pool *redis.Pool // 当程序启动时就初始化这个函数,在main之前执行 func init() { pool = &redis.Pool{ MaxIdle: 8, //最大空闲链接数 MaxActive: 0, // 表示和数据库的最大链接数,0表示没有限制 IdleTimeout: 100, //最大空闲时间 Dial: func() (redis.Conn, error) { //从连接池中取出一个链接 return redis.Dial("tcp", "localhost:6378") }, } } func RedisDo(commandName string, args ...interface{}) (reply interface{}, err error) { // 普通方式链接redis,这个效率太低,因为每次都要取拨号链接 网络开销太大 // conn, err := redis.Dial("tcp", "localhost:6378") // if err != nil { // fmt.Printf("Redis Connect Error: %v", err) // } conn := pool.Get() // 从连接池中获取一个redis链接 defer conn.Close() // 用完关闭, // 这里的参数可变参数 args 在再次调用的时候需要使用...进行解构,否则这个参数的类型就改变了 reply, err = conn.Do(commandName, args...) if err != nil { fmt.Printf("Redis命令 set失败: %v", err) } return } func main() { RedisDo("set", "name2", "Tekin from golang") if rep, err := RedisDo("get", "name2"); err == nil { str, _ := redis.String(rep, err) fmt.Printf("str=%v", str) } else { fmt.Println(err) } }

(图片来源网络,侵删)