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