44 lines
1.0 KiB
Go
44 lines
1.0 KiB
Go
// 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
|
|
}
|