feat(auth): upgrade casbin to v3 and enhance connection pool configurations
- Upgrade casbin from v2 to v3 across go.mod and pkg/auth/casbin.go - Add slide captcha verification to registration flow (CheckVerified, ConsumeVerified) - Add DB wrapper with connection pool statistics and health checks - Add Redis connection pool optimizations with stats and health monitoring - Add new config options: ConnMaxLifetime, HealthCheckInterval, EnableRetryOnError - Optimize slow query threshold from 200ms to 100ms - Add ping with retry mechanism for database and Redis connections
This commit is contained in:
@@ -65,18 +65,21 @@ type DatabaseConfig struct {
|
||||
|
||||
// RedisConfig Redis配置
|
||||
type RedisConfig struct {
|
||||
Host string `mapstructure:"host"`
|
||||
Port int `mapstructure:"port"`
|
||||
Password string `mapstructure:"password"`
|
||||
Database int `mapstructure:"database"`
|
||||
PoolSize int `mapstructure:"pool_size"` // 连接池大小
|
||||
MinIdleConns int `mapstructure:"min_idle_conns"` // 最小空闲连接数
|
||||
MaxRetries int `mapstructure:"max_retries"` // 最大重试次数
|
||||
DialTimeout time.Duration `mapstructure:"dial_timeout"` // 连接超时
|
||||
ReadTimeout time.Duration `mapstructure:"read_timeout"` // 读取超时
|
||||
WriteTimeout time.Duration `mapstructure:"write_timeout"` // 写入超时
|
||||
PoolTimeout time.Duration `mapstructure:"pool_timeout"` // 连接池超时
|
||||
ConnMaxIdleTime time.Duration `mapstructure:"conn_max_idle_time"` // 连接最大空闲时间
|
||||
Host string `mapstructure:"host"`
|
||||
Port int `mapstructure:"port"`
|
||||
Password string `mapstructure:"password"`
|
||||
Database int `mapstructure:"database"`
|
||||
PoolSize int `mapstructure:"pool_size"` // 连接池大小
|
||||
MinIdleConns int `mapstructure:"min_idle_conns"` // 最小空闲连接数
|
||||
MaxRetries int `mapstructure:"max_retries"` // 最大重试次数
|
||||
DialTimeout time.Duration `mapstructure:"dial_timeout"` // 连接超时
|
||||
ReadTimeout time.Duration `mapstructure:"read_timeout"` // 读取超时
|
||||
WriteTimeout time.Duration `mapstructure:"write_timeout"` // 写入超时
|
||||
PoolTimeout time.Duration `mapstructure:"pool_timeout"` // 连接池超时
|
||||
ConnMaxIdleTime time.Duration `mapstructure:"conn_max_idle_time"` // 连接最大空闲时间
|
||||
ConnMaxLifetime time.Duration `mapstructure:"conn_max_lifetime"` // 连接最大生命周期(新增)
|
||||
HealthCheckInterval time.Duration `mapstructure:"health_check_interval"` // 健康检查间隔(新增)
|
||||
EnableRetryOnError bool `mapstructure:"enable_retry_on_error"` // 错误时启用重试(新增)
|
||||
}
|
||||
|
||||
// RustFSConfig RustFS对象存储配置 (S3兼容)
|
||||
@@ -192,18 +195,21 @@ func setDefaults() {
|
||||
viper.SetDefault("database.conn_max_lifetime", "1h")
|
||||
viper.SetDefault("database.conn_max_idle_time", "10m")
|
||||
|
||||
// Redis默认配置
|
||||
// Redis默认配置(优化后的默认值)
|
||||
viper.SetDefault("redis.host", "localhost")
|
||||
viper.SetDefault("redis.port", 6379)
|
||||
viper.SetDefault("redis.database", 0)
|
||||
viper.SetDefault("redis.pool_size", 10)
|
||||
viper.SetDefault("redis.min_idle_conns", 5)
|
||||
viper.SetDefault("redis.pool_size", 16) // 优化:提高默认连接池大小
|
||||
viper.SetDefault("redis.min_idle_conns", 8) // 优化:提高最小空闲连接数
|
||||
viper.SetDefault("redis.max_retries", 3)
|
||||
viper.SetDefault("redis.dial_timeout", "5s")
|
||||
viper.SetDefault("redis.read_timeout", "3s")
|
||||
viper.SetDefault("redis.write_timeout", "3s")
|
||||
viper.SetDefault("redis.pool_timeout", "4s")
|
||||
viper.SetDefault("redis.conn_max_idle_time", "30m")
|
||||
viper.SetDefault("redis.conn_max_idle_time", "10m") // 优化:减少空闲连接超时时间
|
||||
viper.SetDefault("redis.conn_max_lifetime", "30m") // 新增:连接最大生命周期
|
||||
viper.SetDefault("redis.health_check_interval", "30s") // 新增:健康检查间隔
|
||||
viper.SetDefault("redis.enable_retry_on_error", true) // 新增:错误时启用重试
|
||||
|
||||
// RustFS默认配置
|
||||
viper.SetDefault("rustfs.endpoint", "127.0.0.1:9000")
|
||||
@@ -281,6 +287,9 @@ func setupEnvMappings() {
|
||||
viper.BindEnv("redis.write_timeout", "REDIS_WRITE_TIMEOUT")
|
||||
viper.BindEnv("redis.pool_timeout", "REDIS_POOL_TIMEOUT")
|
||||
viper.BindEnv("redis.conn_max_idle_time", "REDIS_CONN_MAX_IDLE_TIME")
|
||||
viper.BindEnv("redis.conn_max_lifetime", "REDIS_CONN_MAX_LIFETIME")
|
||||
viper.BindEnv("redis.health_check_interval", "REDIS_HEALTH_CHECK_INTERVAL")
|
||||
viper.BindEnv("redis.enable_retry_on_error", "REDIS_ENABLE_RETRY_ON_ERROR")
|
||||
|
||||
// RustFS配置
|
||||
viper.BindEnv("rustfs.endpoint", "RUSTFS_ENDPOINT")
|
||||
@@ -427,6 +436,22 @@ func overrideFromEnv(config *Config) {
|
||||
}
|
||||
}
|
||||
|
||||
if connMaxLifetime := os.Getenv("REDIS_CONN_MAX_LIFETIME"); connMaxLifetime != "" {
|
||||
if val, err := time.ParseDuration(connMaxLifetime); err == nil {
|
||||
config.Redis.ConnMaxLifetime = val
|
||||
}
|
||||
}
|
||||
|
||||
if healthCheckInterval := os.Getenv("REDIS_HEALTH_CHECK_INTERVAL"); healthCheckInterval != "" {
|
||||
if val, err := time.ParseDuration(healthCheckInterval); err == nil {
|
||||
config.Redis.HealthCheckInterval = val
|
||||
}
|
||||
}
|
||||
|
||||
if enableRetryOnError := os.Getenv("REDIS_ENABLE_RETRY_ON_ERROR"); enableRetryOnError != "" {
|
||||
config.Redis.EnableRetryOnError = enableRetryOnError == "true" || enableRetryOnError == "1"
|
||||
}
|
||||
|
||||
// 处理邮件配置
|
||||
if emailEnabled := os.Getenv("EMAIL_ENABLED"); emailEnabled != "" {
|
||||
config.Email.Enabled = emailEnabled == "true" || emailEnabled == "True" || emailEnabled == "TRUE" || emailEnabled == "1"
|
||||
|
||||
Reference in New Issue
Block a user