51 lines
949 B
Go
51 lines
949 B
Go
package redis
|
||
|
||
import (
|
||
"carrotskin/pkg/config"
|
||
"fmt"
|
||
"sync"
|
||
|
||
"go.uber.org/zap"
|
||
)
|
||
|
||
var (
|
||
// clientInstance 全局Redis客户端实例
|
||
clientInstance *Client
|
||
// once 确保只初始化一次
|
||
once sync.Once
|
||
// initError 初始化错误
|
||
initError error
|
||
)
|
||
|
||
// Init 初始化Redis客户端(线程安全,只会执行一次)
|
||
func Init(cfg config.RedisConfig, logger *zap.Logger) error {
|
||
once.Do(func() {
|
||
clientInstance, initError = New(cfg, logger)
|
||
if initError != nil {
|
||
return
|
||
}
|
||
})
|
||
return initError
|
||
}
|
||
|
||
// GetClient 获取Redis客户端实例(线程安全)
|
||
func GetClient() (*Client, error) {
|
||
if clientInstance == nil {
|
||
return nil, fmt.Errorf("Redis客户端未初始化,请先调用 redis.Init()")
|
||
}
|
||
return clientInstance, nil
|
||
}
|
||
|
||
// MustGetClient 获取Redis客户端实例,如果未初始化则panic
|
||
func MustGetClient() *Client {
|
||
client, err := GetClient()
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
return client
|
||
}
|
||
|
||
|
||
|
||
|