如何使用Go语言连接redis连接池
解决问题:初始化一定数量的连接,用的时候直接拿,用完放回
- 方法一(使用第三方包自带方法)
- 定义连接常量,定义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 // 空闲连接超时时间,超过超时时间的空闲连接会被关闭。 ) |
- 使用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) }, } } |
- 获取连接,因为使用的pool是全局变量 所以直接用就行了
1 2 | conn:= pool.Get() defer conn.Close() |
- 方法二 (使用channel,自己写)
- 创建全局变量
1 2 3 4 | const( MaxConn= 1000 ) var poolch =make(chan redis.Conn,MaxConn) // |
- 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 }() |
总结
自己写的方法,没有第三方的好,没有等待连接,也没有空闲连接数 ,之后又自己再添加吧(可以封装成方法)。。