如何使用Go语言连接redis连接池

解决问题:初始化一定数量的连接,用的时候直接拿,用完放回

  • 方法一(使用第三方包自带方法)
  1. 定义连接常量,定义pool全局变量
1
2
3
4
5
6
7
8
var pool *redis.Pool
const  (
    REDISHOST="127.0.0.1:6379"
    INDEXES="UserInfo"
    MaxIdlePool=4000        // 最大空闲连接数
    MaxActivepool=0        // pool能分配的最大连接数 当设置成0的时候,该pool连接数没有限制
    IdleTimeoutpool=100   // 空闲连接超时时间,超过超时时间的空闲连接会被关闭。
)
  1. 使用init()函数初始化包
1
2
3
4
5
6
7
8
9
10
func init()  {
    pool =&redis.Pool{
        MaxIdle: MaxIdlePool,
        MaxActive: MaxActivepool,
        IdleTimeout: IdleTimeoutpool,
        Dial: func() (redis.Conn, error) {
            return redis.Dial("tcp", REDISHOST)
        },
    }
}
  1. 获取连接,因为使用的pool是全局变量 所以直接用就行了
1
2
conn:= pool.Get()
defer conn.Close()
  • 方法二 (使用channel,自己写)
  1. 创建全局变量
1
2
3
4
const(
        MaxConn= 1000
)
var poolch =make(chan redis.Conn,MaxConn)  //
  1. connRedis()连接,因为是在iris框架中使用的是iris.New().Logger()…来输出
1
2
3
4
5
6
7
8
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()初始化函数

1
2
3
4
5
func init(){
    for i:=0;i<MaxConn;i++{
        poolch<-connRedis()
    }
}

4.获取连接并放回连接

1
2
3
4
conn:=<-poolch
defer func() {   //当然可以写成函数
    poolch<-conn
}()

总结

自己写的方法,没有第三方的好,没有等待连接,也没有空闲连接数 ,之后又自己再添加吧(可以封装成方法)。。