Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
55 lines
1.2 KiB
Go
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
|
|
}
|