83 lines
3.1 KiB
Go
83 lines
3.1 KiB
Go
package redis
|
|
|
|
import (
|
|
"fmt"
|
|
"planA/planB/initialization/golabl"
|
|
planAType "planA/type"
|
|
"time"
|
|
|
|
"github.com/go-redis/redis/v8"
|
|
)
|
|
|
|
// LinkRedisSetToG 链接redis并保留到全局变量中
|
|
// @return error 错误信息
|
|
func LinkRedisSetToG() error {
|
|
|
|
// 1. 获取redis配置
|
|
redisConfig := golabl.Config.RedisConfig
|
|
redisClientA, redisErr := NewRedisClient(redisConfig[0])
|
|
if redisErr != nil {
|
|
return fmt.Errorf("初始化 redis %v db%v 失败: %v\n", redisConfig[0].Addr, redisConfig[0].DB, redisErr)
|
|
}
|
|
golabl.Redis.RedisDbA = redisClientA
|
|
// Redis B - Redis实例
|
|
redisClientB, redisErr := NewRedisClient(redisConfig[3])
|
|
if redisErr != nil {
|
|
return fmt.Errorf("初始化 redis %v db%v 失败: %v\n", redisConfig[3].Addr, redisConfig[3].DB, redisErr)
|
|
}
|
|
golabl.Redis.RedisDbB = redisClientB
|
|
|
|
// Redis C - Redis实例
|
|
redisClientC, redisErr := NewRedisClient(redisConfig[4])
|
|
if redisErr != nil {
|
|
return fmt.Errorf("初始化 redis %v db%v 失败: %v\n", redisConfig[4].Addr, redisConfig[4].DB, redisErr)
|
|
}
|
|
golabl.Redis.RedisDbC = redisClientC
|
|
|
|
// Redis D - Redis实例
|
|
redisClientD, redisErr := NewRedisClient(redisConfig[5])
|
|
if redisErr != nil {
|
|
return fmt.Errorf("初始化 redis %v db%v 失败: %v\n", redisConfig[5].Addr, redisConfig[5].DB, redisErr)
|
|
}
|
|
golabl.Redis.RedisDbD = redisClientD
|
|
|
|
// Redis E - Redis实例
|
|
redisClientE, redisErr := NewRedisClient(redisConfig[2])
|
|
if redisErr != nil {
|
|
return fmt.Errorf("初始化 redis %v db%v 失败: %v\n", redisConfig[2].Addr, redisConfig[2].DB, redisErr)
|
|
}
|
|
golabl.Redis.RedisDbE = redisClientE
|
|
|
|
return nil
|
|
}
|
|
|
|
// NewRedisClient 创建redis 客户端
|
|
// @param config redis配置
|
|
// @return *redis.Client redis客户端
|
|
// @return error 错误信息
|
|
func NewRedisClient(config planAType.RedisConfig) (*redis.Client, error) {
|
|
ctx := golabl.Ctx
|
|
rdb := redis.NewClient(&redis.Options{
|
|
Addr: config.Addr, // 连接地址
|
|
Password: config.Password, // 密码
|
|
DB: config.DB, // 数据库
|
|
PoolSize: config.PoolSize, // 连接池大小
|
|
PoolTimeout: time.Duration(config.PoolTimeout), // 连接池超时时间
|
|
ReadTimeout: time.Duration(config.ReadTimeout), // 读取超时
|
|
WriteTimeout: time.Duration(config.WriteTimeout), // 写入超时
|
|
DialTimeout: time.Duration(config.DialTimeout), // 连接超时
|
|
IdleTimeout: time.Duration(config.IdleTimeout), // 空闲超时
|
|
MinIdleConns: config.MinIdleConns, // 最小空闲连接数
|
|
IdleCheckFrequency: time.Duration(config.IdleCheckFrequency), // 空闲检查频率
|
|
MaxRetries: config.MaxRetries, // 最大重试次数
|
|
MaxRetryBackoff: time.Duration(config.MaxRetryBackoff), // 最大重试间隔
|
|
MinRetryBackoff: time.Duration(config.MinRetryBackoff), // 最小重试间隔
|
|
})
|
|
// 测试连接
|
|
_, err := rdb.Ping(ctx).Result()
|
|
if err != nil {
|
|
return rdb, err
|
|
}
|
|
return rdb, nil
|
|
}
|