package data import ( "context" "kra/internal/conf" "github.com/go-kratos/kratos/v2/log" "github.com/redis/go-redis/v9" ) // NewRedisClient 创建Redis客户端 func NewRedisClient(c *conf.Data, l log.Logger) (redis.UniversalClient, func(), error) { helper := log.NewHelper(l) var client redis.UniversalClient if c.Redis.UseCluster { client = redis.NewClusterClient(&redis.ClusterOptions{ Addrs: c.Redis.ClusterAddrs, Password: c.Redis.Password, }) } else { client = redis.NewClient(&redis.Options{ Addr: c.Redis.Addr, Password: c.Redis.Password, DB: int(c.Redis.Db), }) } // 测试连接 ctx := context.Background() if _, err := client.Ping(ctx).Result(); err != nil { helper.Errorf("failed to connect redis: %v", err) return nil, nil, err } cleanup := func() { helper.Info("closing redis connection") if err := client.Close(); err != nil { helper.Errorf("failed to close redis: %v", err) } } helper.Info("redis connected successfully") return client, cleanup, nil }