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 } client = redis.NewClient(opt) ctx := context.Background() if err := client.Ping(ctx).Err(); err != nil { client = nil // 连接失败时清空,避免后续使用超时;cache 将自动降级到内存备用 log.Printf("redis: 连接失败,已降级到内存缓存(%v)", err) return err } 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 }