package lib import ( "context" "gitdxz.51daxuetong.cn/go_dev/bids_rpcx/config" "github.com/go-redis/redis/v8" "sync" "time" ) var Redis *redis.Client var redisSyncOne sync.Once func GetRedisClient() (*redis.Client, error) { redisSyncOne.Do(func() { redisObj, err := GetNewRedisClient() if err != nil { return } Redis = redisObj }) err := Redis.Ping(context.Background()).Err() if err != nil { time.Sleep(10 * time.Second) Redis, err := GetNewRedisClient() return Redis, err } return Redis, err } func GetNewRedisClient() (*redis.Client, error) { cc := config.GetConfig() rHost := cc.String("redis_host") rPort := cc.String("redis_port") rPwd := cc.String("redis_password") redisObj := redis.NewClient(&redis.Options{ Addr: rHost + ":" + rPort, Password: rPwd, // no password set DB: 0, // use default DB }) err := redisObj.Ping(context.Background()).Err() return redisObj, err }