package redis import ( "context" "log" "github.com/redis/go-redis/v9" ) var client *redis.Client // Init 初始化 Redis 客户端,url 为空或 "disable" 时跳过 func Init(url string) error { if url == "" || url == "disable" { return nil } opt, err := redis.ParseURL(url) if err != nil { return err } tmp := redis.NewClient(opt) ctx := context.Background() if err := tmp.Ping(ctx).Err(); err != nil { _ = tmp.Close() // 避免未关闭客户端在后台持续 dial,刷屏 pool 重试日志 client = nil log.Printf("redis: 连接失败,已降级到内存缓存(%v)", err) return err } client = tmp log.Printf("redis: connected to %s", opt.Addr) return nil } // Client 返回 Redis 客户端,未初始化时返回 nil func Client() *redis.Client { return client } // Close 关闭连接(优雅退出时调用) func Close() error { if client != nil { return client.Close() } return nil }