优化redis client
This commit is contained in:
parent
4e00c367d5
commit
eaf61d85df
61
client.go
61
client.go
@ -188,6 +188,18 @@ func (c *OwnClient) AddClientWithCfgDir(cfgDir string) error {
|
|||||||
return c.init()
|
return c.init()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddClientWithCfg 通过配置增加实例
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 11:45 2023/8/16
|
||||||
|
func (c *OwnClient) AddClientWithCfg(flag string, cfg *FullConfig) error {
|
||||||
|
c.lock.Lock()
|
||||||
|
c.confTable[flag] = cfg
|
||||||
|
c.lock.Unlock()
|
||||||
|
return c.init()
|
||||||
|
}
|
||||||
|
|
||||||
// loadConfig 载入配置文件
|
// loadConfig 载入配置文件
|
||||||
//
|
//
|
||||||
// Author : go_developer@163.com<白茶清欢>
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
@ -258,6 +270,10 @@ func (c *OwnClient) batchLoadConfig(cfgDir string) error {
|
|||||||
func (c *OwnClient) init() error {
|
func (c *OwnClient) init() error {
|
||||||
var err error
|
var err error
|
||||||
for flag, conf := range c.confTable {
|
for flag, conf := range c.confTable {
|
||||||
|
if _, exist := c.instanceTable[flag]; exist {
|
||||||
|
// 实例已经初始化
|
||||||
|
continue
|
||||||
|
}
|
||||||
c.instanceTable[flag] = &RealClient{
|
c.instanceTable[flag] = &RealClient{
|
||||||
Flag: flag,
|
Flag: flag,
|
||||||
Master: redisInstance.NewClient(Config2Options(conf.Master)),
|
Master: redisInstance.NewClient(Config2Options(conf.Master)),
|
||||||
@ -281,12 +297,14 @@ func (c *OwnClient) initLogger(flag string, conf *logger.InputLogConfig) error {
|
|||||||
return LoggerInitFail(flag, err)
|
return LoggerInitFail(flag, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetRedisClient 获取redis实例
|
// GetRedisClientWithError 获取redis实例
|
||||||
//
|
//
|
||||||
// Author : go_developer@163.com<白茶清欢>
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
//
|
//
|
||||||
// Date : 5:16 下午 2021/2/27
|
// Date : 5:16 下午 2021/2/27
|
||||||
func (c *OwnClient) GetRedisClient(flag string) (*RealClient, error) {
|
func (c *OwnClient) GetRedisClientWithError(flag string) (*RealClient, error) {
|
||||||
|
c.lock.RLock()
|
||||||
|
defer c.lock.RUnlock()
|
||||||
redisClient, exist := c.instanceTable[flag]
|
redisClient, exist := c.instanceTable[flag]
|
||||||
if !exist {
|
if !exist {
|
||||||
return nil, FlagNotFound(flag)
|
return nil, FlagNotFound(flag)
|
||||||
@ -294,6 +312,16 @@ func (c *OwnClient) GetRedisClient(flag string) (*RealClient, error) {
|
|||||||
return redisClient, nil
|
return redisClient, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetRedisClient ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 11:52 2023/8/16
|
||||||
|
func (c *OwnClient) GetRedisClient(flag string) *RealClient {
|
||||||
|
redisClient, _ := c.GetRedisClientWithError(flag)
|
||||||
|
return redisClient
|
||||||
|
}
|
||||||
|
|
||||||
// log 记录redis请求日志
|
// log 记录redis请求日志
|
||||||
//
|
//
|
||||||
// Author : go_developer@163.com<白茶清欢>
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
@ -333,7 +361,7 @@ func (c *OwnClient) CommandProxy(ctx *Context, flag string, cmd string, param ..
|
|||||||
if nil == ctx {
|
if nil == ctx {
|
||||||
ctx = NewContext(flag)
|
ctx = NewContext(flag)
|
||||||
}
|
}
|
||||||
if realClient, err = c.GetRedisClient(ctx.Flag); nil != err {
|
if realClient, err = c.GetRedisClientWithError(ctx.Flag); nil != err {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
flagArr := strings.Split(flag, "#")
|
flagArr := strings.Split(flag, "#")
|
||||||
@ -373,13 +401,38 @@ func (c *OwnClient) CommandProxyWithReceiver(ctx *Context, flag string, receiver
|
|||||||
return ResultConvertFail(json.Unmarshal([]byte(result), receiver))
|
return ResultConvertFail(json.Unmarshal([]byte(result), receiver))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RemoveClient 移除client
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 11:49 2023/8/16
|
||||||
|
func (c *OwnClient) RemoveClient(flag string) {
|
||||||
|
c.lock.Lock()
|
||||||
|
defer c.lock.Unlock()
|
||||||
|
delete(c.confTable, flag)
|
||||||
|
if _, exist := c.instanceTable[flag]; exist {
|
||||||
|
if nil != c.instanceTable[flag].Master {
|
||||||
|
_ = c.instanceTable[flag].Master.Close()
|
||||||
|
}
|
||||||
|
if nil != c.instanceTable[flag].Slave {
|
||||||
|
_ = c.instanceTable[flag].Slave.Close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete(c.instanceTable, flag)
|
||||||
|
}
|
||||||
|
|
||||||
// ClientInterface 定义redis client的接口实现,方便单元测试数据mock
|
// ClientInterface 定义redis client的接口实现,方便单元测试数据mock
|
||||||
//
|
//
|
||||||
// Author : go_developer@163.com<白茶清欢>
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
//
|
//
|
||||||
// Date : 10:49 下午 2021/2/27
|
// Date : 10:49 下午 2021/2/27
|
||||||
type ClientInterface interface {
|
type ClientInterface interface {
|
||||||
GetRedisClient(flag string) (*RealClient, error)
|
GetRedisClient(flag string) *RealClient
|
||||||
|
GetRedisClientWithError(flag string) (*RealClient, error)
|
||||||
CommandProxy(ctx *Context, flag string, cmd string, param ...interface{}) (string, error)
|
CommandProxy(ctx *Context, flag string, cmd string, param ...interface{}) (string, error)
|
||||||
CommandProxyWithReceiver(ctx *Context, flag string, receiver interface{}, cmd string, param ...interface{}) error
|
CommandProxyWithReceiver(ctx *Context, flag string, receiver interface{}, cmd string, param ...interface{}) error
|
||||||
|
AddClientWithCfgFile(cfgPath string) error
|
||||||
|
AddClientWithCfgDir(cfgDir string) error
|
||||||
|
AddClientWithCfg(flag string, cfg *FullConfig) error
|
||||||
|
RemoveClient(flag string)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user