From cbf919e45b5b2bbaec3abd98d3998320bd581dad Mon Sep 17 00:00:00 2001 From: Pinghao Wu Date: Mon, 3 Mar 2025 22:05:44 +0800 Subject: [PATCH] redis: avoid building UniversalOptions for standard mode This makes it support all options that go-redis recognizes in ParseURL, by constructing a standard client directly instead of building UniversalOptions ourselves. --- redis/{url.go => client.go} | 13 +++++++------ server/server.go | 3 +-- 2 files changed, 8 insertions(+), 8 deletions(-) rename redis/{url.go => client.go} (91%) diff --git a/redis/url.go b/redis/client.go similarity index 91% rename from redis/url.go rename to redis/client.go index e9f719863d3c0102811829d6d8f5e1290f7fbb81..71abd98a2a39b274171d42e7f265a3d6f14dea90 100644 --- a/redis/url.go +++ b/redis/client.go @@ -68,7 +68,7 @@ func parseSentinelURLs(urls []*url.URL) (*redis.UniversalOptions, error) { return &uopts, nil } -func ParseURL(raw string) (*redis.UniversalOptions, error) { +func NewUniversalClient(raw string) (redis.UniversalClient, error) { // Support multiple URLs for sentinel connections var schemes []string var urls []*url.URL @@ -90,15 +90,16 @@ func ParseURL(raw string) (*redis.UniversalOptions, error) { if err != nil { return nil, err } - return &redis.UniversalOptions{ - Addrs: []string{opts.Addr}, - // TODO - }, nil + return redis.NewClient(opts), nil } if urls[0].Scheme != "redis+sentinel" && urls[0].Scheme != "rediss+sentinel" { return nil, fmt.Errorf("invalid connection URL scheme: %s", urls[0].Scheme) } // a single sentinel URL, fall through to parsing that } - return parseSentinelURLs(urls) + opts, err := parseSentinelURLs(urls) + if err != nil { + return nil, err + } + return redis.NewUniversalClient(opts), nil } diff --git a/server/server.go b/server/server.go index 8a8b749069cef78eb028fe66730d53ccfd8c8b47..a1eb1866e320599ff6ce0da2546d2810d2afbb92 100644 --- a/server/server.go +++ b/server/server.go @@ -178,11 +178,10 @@ func (server *Server) WithDefaultMiddleware() *Server { if !ok { rcs = "redis://" } - ropts, err := redis.ParseURL(rcs) + rc, err := redis.NewUniversalClient(rcs) if err != nil { log.Fatalf("Invalid sr.ht::redis-host in config.ini: %v", err) } - rc := goRedis.NewUniversalClient(ropts) server.redis = rc apiconf := fmt.Sprintf("%s::api", server.service)