// Package redis provides a process-wide Redis client (one connection pool per Addr). // Construct once in svc.ServiceContext and inject into model repositories / use cases. package redis import ( "fmt" "github.com/zeromicro/go-zero/core/stores/redis" ) // Client wraps go-zero Redis so all modules share the same connection pool. type Client struct { r *redis.Redis pubSubFields } // NewClient returns a shared Redis client, or (nil, nil) when Host is empty. func NewClient(conf redis.RedisConf) (*Client, error) { if conf.Host == "" { return nil, nil } if err := conf.Validate(); err != nil { return nil, fmt.Errorf("redis: invalid config: %w", err) } return &Client{r: redis.MustNewRedis(conf)}, nil } // MustNewClient is like NewClient but panics on error (startup wiring). func MustNewClient(conf redis.RedisConf) *Client { c, err := NewClient(conf) if err != nil { panic(err) } return c } // Zero returns the underlying go-zero Redis handle. func (c *Client) Zero() *redis.Redis { if c == nil { return nil } return c.r }