From 2f247ebe83446fe246462259a33dfda68d06c8bf Mon Sep 17 00:00:00 2001 From: Sukharev Maxim Date: Wed, 11 Jan 2017 10:32:10 +0700 Subject: [PATCH] Clone and WithContext #471 --- redis.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/redis.go b/redis.go index 894294d..dc779f4 100644 --- a/redis.go +++ b/redis.go @@ -1,6 +1,7 @@ package redis // import "gopkg.in/redis.v5" import ( + "context" "fmt" "log" "time" @@ -23,6 +24,8 @@ type baseClient struct { process func(Cmder) error onClose func() error // hook called when client is closed + + ctx context.Context } func (c *baseClient) String() string { @@ -309,6 +312,29 @@ func NewClient(opt *Options) *Client { return newClient(opt, newConnPool(opt)) } +func (c *Client) Clone() *Client { + c2 := new(Client) + *c2 = *c + c2.cmdable.process = c2.Process + return c2 +} + +func (c *Client) Context() context.Context { + if c.ctx != nil { + return c.ctx + } + return context.Background() +} + +func (c *Client) WithContext(ctx context.Context) *Client { + if ctx == nil { + panic("nil context") + } + c2 := c.Clone() + c2.ctx = ctx + return c2 +} + // PoolStats returns connection pool stats. func (c *Client) PoolStats() *PoolStats { s := c.connPool.Stats()