package redis import ( "fmt" "os" "github.com/alicebob/miniredis/v2" redis9 "github.com/redis/go-redis/v9" "go.uber.org/zap" ) // 本文件原包含基于 sync.Once 的全局单例(Init/GetClient/MustGetClient/Close)。 // // 在 DI 迁移(阶段4)后,全局单例已被移除。Redis 客户端由 fx.Provide 构造 // (见 internal/app/infra_module.go 的 provideRedis,包含 miniredis 回退逻辑), // 通过构造函数参数注入到各消费者。 // // Redis 客户端构造逻辑见 redis.go 的 New()。 // AllowFallbackToMiniRedis 检查当前环境是否允许回退到 miniredis(仅开发/测试环境)。 func AllowFallbackToMiniRedis() bool { env := os.Getenv("ENVIRONMENT") return env == "development" || env == "test" || env == "dev" || os.Getenv("USE_MINIREDIS") == "true" } // InitMiniRedis 初始化 miniredis(用于开发/测试环境的 DI 回退)。 func InitMiniRedis(logger *zap.Logger) (*Client, error) { mr, err := miniredis.Run() if err != nil { return nil, fmt.Errorf("启动miniredis失败: %w", err) } redisClient := redis9.NewClient(&redis9.Options{ Addr: mr.Addr(), }) client := &Client{ Client: redisClient, logger: logger, } logger.Info("miniredis已启动", zap.String("addr", mr.Addr())) return client, nil }