Files
2026-04-26 20:34:39 +02:00

44 lines
1.3 KiB
Go

package redisconn
import (
"github.com/redis/go-redis/v9"
)
// NewMasterClient builds the master Redis client from cfg using the
// conservative options shared by the existing service publishers
// (`Protocol: 2`, `DisableIdentity: true`, dial/read/write timeouts bound to
// cfg.OperationTimeout).
//
// NewMasterClient does not validate cfg; callers are expected to call
// Config.Validate (or LoadFromEnv which already does) before invoking this.
func NewMasterClient(cfg Config) *redis.Client {
return redis.NewClient(buildOptions(cfg.MasterAddr, cfg))
}
// NewReplicaClients builds one Redis client per replica address. It returns
// nil when no replicas are configured; callers treat that as "no replicas
// wired".
func NewReplicaClients(cfg Config) []*redis.Client {
if len(cfg.ReplicaAddrs) == 0 {
return nil
}
clients := make([]*redis.Client, 0, len(cfg.ReplicaAddrs))
for _, addr := range cfg.ReplicaAddrs {
clients = append(clients, redis.NewClient(buildOptions(addr, cfg)))
}
return clients
}
func buildOptions(addr string, cfg Config) *redis.Options {
return &redis.Options{
Addr: addr,
Password: cfg.Password,
DB: cfg.DB,
Protocol: 2,
DisableIdentity: true,
DialTimeout: cfg.OperationTimeout,
ReadTimeout: cfg.OperationTimeout,
WriteTimeout: cfg.OperationTimeout,
}
}