goProject/trunk/goutil/redisUtil/redisConfig.go
皮蛋13361098506 1b77f62820 初始化项目
2025-01-06 16:01:02 +08:00

124 lines
3.3 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package redisUtil
import (
"fmt"
"strconv"
"strings"
"time"
)
// Redis配置对象
type RedisConfig struct {
// 连接字符串
ConnectionString string
// 密码
Password string
// 数据库编号
Database int
// 最大活跃连接数
MaxActive int
// 最大空闲连接数
MaxIdle int
// 空闲超时
IdleTimeout time.Duration
// 连接超时
DialConnectTimeout time.Duration
}
// 将redis连接字符串转化为redis config对象
// 格式ConnectionString=10.1.0.21:6379;Password=redis_pwd;Database=3;MaxActive=50;MaxIdle=20;IdleTimeout=300;DialConnectTimeout=10;
// redisConfigStrredis连接字符串
// 返回值:
// redis config对象
// 错误对象
func NewRedisConfig(redisConfigStr string) (redisConfig *RedisConfig, err error) {
var connectionString string
var password string
var database int
var maxActive int
var maxIdle int
var idleTimeout time.Duration
var dialConectTimeout time.Duration
var count int = 7
var subCount int = 2
itemList := strings.Split(redisConfigStr, ";")
// 去掉最后的空数据
if itemList[len(itemList)-1] == "" {
itemList = itemList[0 : len(itemList)-1]
}
if len(itemList) != count {
err = fmt.Errorf("%s格式不正确需要包含%d个部分现在有%d个部分", redisConfigStr, count, len(itemList))
return
}
for _, item := range itemList {
subItemList := strings.Split(item, "=")
if len(subItemList) != subCount {
err = fmt.Errorf("%s格式不正确需要包含%d个部分", item, subCount)
return
}
// 分别进行判断
switch strings.ToLower(subItemList[0]) {
case strings.ToLower("ConnectionString"):
connectionString = subItemList[1]
case strings.ToLower("Password"):
password = subItemList[1]
case strings.ToLower("Database"):
if database, err = strconv.Atoi(subItemList[1]); err != nil {
err = fmt.Errorf("%s转化为int型失败", subItemList[1])
return
}
case strings.ToLower("MaxActive"):
if maxActive, err = strconv.Atoi(subItemList[1]); err != nil {
err = fmt.Errorf("%s转化为int型失败", subItemList[1])
return
}
case strings.ToLower("MaxIdle"):
if maxIdle, err = strconv.Atoi(subItemList[1]); err != nil {
err = fmt.Errorf("%s转化为int型失败", subItemList[1])
return
}
case strings.ToLower("IdleTimeout"):
if idleTimeout_int, err1 := strconv.Atoi(subItemList[1]); err1 != nil {
err = fmt.Errorf("%s转化为int型失败", subItemList[1])
return
} else {
idleTimeout = time.Duration(idleTimeout_int) * time.Second
}
case strings.ToLower("DialConnectTimeout"):
if dialConectTimeout_int, err1 := strconv.Atoi(subItemList[1]); err1 != nil {
err = fmt.Errorf("%s转化为int型失败", subItemList[1])
return
} else {
dialConectTimeout = time.Duration(dialConectTimeout_int) * time.Second
}
}
}
redisConfig = NewRedisConfig2(connectionString, password, database, maxActive, maxIdle, idleTimeout, dialConectTimeout)
return
}
func NewRedisConfig2(connectionString, password string,
database, maxActive, maxIdle int,
idleTimeout, dialConnectTimeout time.Duration) *RedisConfig {
return &RedisConfig{
ConnectionString: connectionString,
Password: password,
Database: database,
MaxActive: maxActive,
MaxIdle: maxIdle,
IdleTimeout: idleTimeout,
DialConnectTimeout: dialConnectTimeout,
}
}