如何使用Go语言连接redis连接池
解决问题:初始化一定数量的连接,用的时候直接拿,用完放回
- 方法一(使用第三方包自带方法)
- 定义连接常量,定义pool全局变量
var pool *redis.Pool
const (
REDISHOST="127.0.0.1:6379"
INDEXES="UserInfo"
MaxIdlePool=4000 // 最大空闲连接数
MaxActivepool=0 // pool能分配的最大连接数 当设置成0的时候,该pool连接数没有限制
IdleTimeoutpool=100 // 空闲连接超时时间,超过超时时间的空闲连接会被关闭。
)
- 使用init()函数初始化包
func init() {
pool =&redis.Pool{
MaxIdle: MaxIdlePool,
MaxActive: MaxActivepool,
IdleTimeout: IdleTimeoutpool,
Dial: func() (redis.Conn, error) {
return redis.Dial("tcp", REDISHOST)
},
}
}
- 获取连接,因为使用的pool是全局变量 所以直接用就行了
conn:= pool.Get()
defer conn.Close()
- 方法二 (使用channel,自己写)
- 创建全局变量
const(
MaxConn= 1000
)
var poolch =make(chan redis.Conn,MaxConn) //
- connRedis()连接,因为是在iris框架中使用的是iris.New().Logger()…来输出
func connRedis() redis.Conn{
conn,err:=redis.Dial("tcp", REDISHOST);if err!=nil{
iris.New().Logger().Error("连接Redis数据库失败....")
}else {
iris.New().Logger().Info("连接Redis数据库成功....")
}
return conn
}
3.同样是init()初始化函数
func init(){
for i:=0;i<MaxConn;i++{
poolch<-connRedis()
}
}
4.获取连接并放回连接
conn:=<-poolch
defer func() { //当然可以写成函数
poolch<-conn
}()
总结
自己写的方法,没有第三方的好,没有等待连接,也没有空闲连接数 ,之后又自己再添加吧(可以封装成方法)。。