Files
junhong_cmp_fiber/pkg/database/redis.go
huang d66323487b refactor: align framework cleanup with new bootstrap flow
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-11-19 12:47:25 +08:00

55 lines
1.2 KiB
Go

package database
import (
"context"
"fmt"
"time"
"github.com/redis/go-redis/v9"
"go.uber.org/zap"
)
// RedisConfig Redis 配置
type RedisConfig struct {
Address string
Password string
DB int
PoolSize int
MinIdleConns int
DialTimeout time.Duration
ReadTimeout time.Duration
WriteTimeout time.Duration
}
// NewRedisClient 创建新的 Redis 客户端
func NewRedisClient(cfg RedisConfig, logger *zap.Logger) (*redis.Client, error) {
client := redis.NewClient(&redis.Options{
Addr: cfg.Address,
Password: cfg.Password,
DB: cfg.DB,
PoolSize: cfg.PoolSize,
MinIdleConns: cfg.MinIdleConns,
DialTimeout: cfg.DialTimeout,
ReadTimeout: cfg.ReadTimeout,
WriteTimeout: cfg.WriteTimeout,
MaxRetries: 3,
PoolTimeout: 4 * time.Second,
DisableIndentity: true,
})
// 测试连接
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := client.Ping(ctx).Err(); err != nil {
return nil, fmt.Errorf("redis连接错误: %w", err)
}
logger.Info("Redis 连接成功",
zap.String("address", cfg.Address),
zap.Int("db", cfg.DB),
)
return client, nil
}