template-monorepo/internal/library/redis/client.go

44 lines
1.0 KiB
Go
Raw Normal View History

// 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
}