Go 存储系列 Redis连接池

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

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

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

总结

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

猜你喜欢

转载自blog.csdn.net/qq_29175897/article/details/106809871
今日推荐