go-micro.dev/v5@v5.12.0/cache/redis/options.go (about) 1 package redis 2 3 import ( 4 "context" 5 6 rclient "github.com/go-redis/redis/v8" 7 "go-micro.dev/v5/cache" 8 ) 9 10 type redisOptionsContextKey struct{} 11 12 // WithRedisOptions sets advanced options for redis. 13 func WithRedisOptions(options rclient.UniversalOptions) cache.Option { 14 return func(o *cache.Options) { 15 if o.Context == nil { 16 o.Context = context.Background() 17 } 18 19 o.Context = context.WithValue(o.Context, redisOptionsContextKey{}, options) 20 } 21 } 22 23 func newUniversalClient(options cache.Options) rclient.UniversalClient { 24 if options.Context == nil { 25 options.Context = context.Background() 26 } 27 28 opts, ok := options.Context.Value(redisOptionsContextKey{}).(rclient.UniversalOptions) 29 if !ok { 30 addr := "redis://127.0.0.1:6379" 31 if len(options.Address) > 0 { 32 addr = options.Address 33 } 34 35 redisOptions, err := rclient.ParseURL(addr) 36 if err != nil { 37 redisOptions = &rclient.Options{Addr: addr} 38 } 39 40 return rclient.NewClient(redisOptions) 41 } 42 43 if len(opts.Addrs) == 0 && len(options.Address) > 0 { 44 opts.Addrs = []string{options.Address} 45 } 46 47 return rclient.NewUniversalClient(&opts) 48 }