parent
450136a0c0
commit
ddb126db17
@ -0,0 +1,55 @@ |
|||||||
|
package cfg |
||||||
|
|
||||||
|
import ( |
||||||
|
"context" |
||||||
|
"fmt" |
||||||
|
|
||||||
|
"github.com/mediocregopher/mediocre-go-lib/v2/mctx" |
||||||
|
"github.com/mediocregopher/radix/v4" |
||||||
|
) |
||||||
|
|
||||||
|
// RadixClient is a single redis client which can be configured.
|
||||||
|
type RadixClient struct { |
||||||
|
radix.Client |
||||||
|
|
||||||
|
proto, addr string |
||||||
|
poolSize int |
||||||
|
} |
||||||
|
|
||||||
|
// SetupCfg implement the cfg.Cfger interface.
|
||||||
|
func (c *RadixClient) SetupCfg(cfg *Cfg) { |
||||||
|
|
||||||
|
cfg.StringVar(&c.proto, "redis-proto", "tcp", "Network protocol to connect to redis over, can be tcp or unix") |
||||||
|
cfg.StringVar(&c.addr, "redis-addr", "127.0.0.1:6379", "Address redis is expected to listen on") |
||||||
|
cfg.IntVar(&c.poolSize, "redis-pool-size", 5, "Number of connections in the redis pool to keep") |
||||||
|
|
||||||
|
cfg.OnInit(func(ctx context.Context) error { |
||||||
|
client, err := (radix.PoolConfig{ |
||||||
|
Size: c.poolSize, |
||||||
|
}).New( |
||||||
|
ctx, c.proto, c.addr, |
||||||
|
) |
||||||
|
|
||||||
|
if err != nil { |
||||||
|
return fmt.Errorf( |
||||||
|
"initializing redis pool of size %d at %s://%s: %w", |
||||||
|
c.poolSize, c.proto, c.addr, err, |
||||||
|
) |
||||||
|
} |
||||||
|
|
||||||
|
c.Client = client |
||||||
|
return nil |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// Annotate implements mctx.Annotator interface.
|
||||||
|
func (c *RadixClient) Annotate(a mctx.Annotations) { |
||||||
|
a["redisProto"] = c.proto |
||||||
|
a["redisAddr"] = c.addr |
||||||
|
a["redisPoolSize"] = c.poolSize |
||||||
|
} |
||||||
|
|
||||||
|
// Close cleans up the radix client.
|
||||||
|
func (c *RadixClient) Close() error { |
||||||
|
return c.Client.Close() |
||||||
|
} |
Loading…
Reference in new issue