开发过程中,必不可少的就是要使用redis,借助redigo,通过连接池的方式连接redis,可以极大的提高性能
(基于go 1.16 和 github.com/gomodule/redigo v1.8.8)
import (
"errors"
"fmt"
"strconv"
"time"
"github.com/gomodule/redigo/redis"
"github.com/toolkits/pkg/logger"
)
var (
RedisClient *redis.Pool
)
func RedisConn(host, port, auth string) {
address := fmt.Sprintf("%s:%s", host, port)
// 建立连接池
RedisClient = &redis.Pool{
// 从配置文件获取maxidle以及maxactive,取不到则用后面的默认值
MaxIdle: 16, //最初的连接数量
//MaxActive:10000, //最大连接数量
MaxActive: 0, //连接池最大连接数量,不确定可以用0(0表示自动定义),按需分配
IdleTimeout: 5 * time.Second, //连接关闭时间 5秒 (5秒不使用自动关闭,因为线上redis超时时间是10s)
Dial: func() (redis.Conn, error) { //要连接的redis数据库
c, err := redis.Dial("tcp", address)
if err != nil {
return nil, err
}
if auth != "" && auth != "none" {
if _, err := c.Do("AUTH", auth); err != nil {
c.Close()
logger.Error("redis auth error : ", err.Error())
return nil, err
}
}
return c, nil
},
TestOnBorrow: func(c redis.Conn, t time.Time) error {
_, err := c.Do("PING")
return err
},
}
}