增加Redis的调整,直接返回redis对象
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package factory
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
@@ -8,6 +9,7 @@ import (
|
||||
"git.toowon.com/jimmy/go-common/email"
|
||||
"git.toowon.com/jimmy/go-common/logger"
|
||||
"git.toowon.com/jimmy/go-common/sms"
|
||||
"github.com/redis/go-redis/v9"
|
||||
"gorm.io/driver/mysql"
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/driver/sqlite"
|
||||
@@ -113,9 +115,66 @@ func (f *Factory) GetDatabase() (*gorm.DB, error) {
|
||||
return db, nil
|
||||
}
|
||||
|
||||
// GetRedisClient 获取Redis客户端对象(已初始化)
|
||||
// 返回已初始化的Redis客户端对象,可直接使用
|
||||
func (f *Factory) GetRedisClient() (*redis.Client, error) {
|
||||
if f.cfg.Redis == nil {
|
||||
return nil, fmt.Errorf("redis config is nil")
|
||||
}
|
||||
|
||||
// 获取Redis地址
|
||||
addr := f.cfg.GetRedisAddr()
|
||||
if addr == "" {
|
||||
return nil, fmt.Errorf("redis address is empty")
|
||||
}
|
||||
|
||||
// 设置默认值
|
||||
redisConfig := f.cfg.Redis
|
||||
if redisConfig.PoolSize == 0 {
|
||||
redisConfig.PoolSize = 10 // 默认连接池大小
|
||||
}
|
||||
if redisConfig.MinIdleConns == 0 {
|
||||
redisConfig.MinIdleConns = 5 // 默认最小空闲连接数
|
||||
}
|
||||
if redisConfig.DialTimeout == 0 {
|
||||
redisConfig.DialTimeout = 5 // 默认连接超时5秒
|
||||
}
|
||||
if redisConfig.ReadTimeout == 0 {
|
||||
redisConfig.ReadTimeout = 3 // 默认读取超时3秒
|
||||
}
|
||||
if redisConfig.WriteTimeout == 0 {
|
||||
redisConfig.WriteTimeout = 3 // 默认写入超时3秒
|
||||
}
|
||||
|
||||
// 创建Redis客户端
|
||||
client := redis.NewClient(&redis.Options{
|
||||
Addr: addr,
|
||||
Password: redisConfig.Password,
|
||||
DB: redisConfig.Database,
|
||||
PoolSize: redisConfig.PoolSize,
|
||||
MinIdleConns: redisConfig.MinIdleConns,
|
||||
MaxRetries: redisConfig.MaxRetries,
|
||||
DialTimeout: time.Duration(redisConfig.DialTimeout) * time.Second,
|
||||
ReadTimeout: time.Duration(redisConfig.ReadTimeout) * time.Second,
|
||||
WriteTimeout: time.Duration(redisConfig.WriteTimeout) * time.Second,
|
||||
})
|
||||
|
||||
// 测试连接
|
||||
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(redisConfig.DialTimeout)*time.Second)
|
||||
defer cancel()
|
||||
|
||||
_, err := client.Ping(ctx).Result()
|
||||
if err != nil {
|
||||
client.Close() // 连接失败时关闭客户端
|
||||
return nil, fmt.Errorf("failed to connect to redis: %w", err)
|
||||
}
|
||||
|
||||
return client, nil
|
||||
}
|
||||
|
||||
// GetRedisConfig 获取Redis配置(用于创建Redis客户端)
|
||||
// 返回Redis配置对象,调用方可以使用此配置创建Redis客户端
|
||||
// 注意:Go标准库没有Redis客户端,需要调用方使用第三方库(如go-redis/redis)创建
|
||||
// 注意:推荐使用 GetRedisClient 方法直接获取已初始化的客户端
|
||||
func (f *Factory) GetRedisConfig() *config.RedisConfig {
|
||||
return f.cfg.Redis
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user