45 lines
618 B
Go
45 lines
618 B
Go
package redis
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
func NewClientPool(args ...Pool) ClientPoolInterface {
|
|
result := &ClientPool{}
|
|
|
|
if len(args) > 0 {
|
|
result.pool = args[0]
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
type ClientPoolInterface interface {
|
|
GetPool() Pool
|
|
SetPool(pool Pool)
|
|
GetFromPool() Client
|
|
}
|
|
|
|
type ClientPool struct {
|
|
oncePool sync.Once
|
|
pool Pool
|
|
}
|
|
|
|
func (f *ClientPool) GetPool() Pool {
|
|
f.oncePool.Do(func() {
|
|
if f.pool == nil {
|
|
f.pool = NewPool()
|
|
}
|
|
})
|
|
|
|
return f.pool
|
|
}
|
|
|
|
func (f *ClientPool) SetPool(pool Pool) {
|
|
f.pool = pool
|
|
}
|
|
|
|
func (f *ClientPool) GetFromPool() Client {
|
|
return NewClient(f.GetPool().Get())
|
|
}
|