46 lines
1.3 KiB
Go
46 lines
1.3 KiB
Go
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
|
||
}
|