package lib

import (
	. "jjl-tools/tinodeService/config"
	"sync"

	"github.com/go-redis/redis"
)

type Redis struct{}

var redisClient *Redis
var redisDb map[int]*redis.Client
var redisOnce sync.Once
var redislock *sync.Mutex = &sync.Mutex{}

//create obj
func GetRedisInstance() *Redis {
	redisOnce.Do(func() {
		if len(redisDb) == 0 {
			redisDb = make(map[int]*redis.Client)
		}
		redisClient = &Redis{}
	})
	return redisClient
}

//action
func (Redis) Connect(db int) *redis.Client {
	//double check pattern
	if redisDb[db] == nil {
		redislock.Lock()
		defer redislock.Unlock()

		if redisDb[db] == nil {
			redisDb[db] = redis.NewClient(&redis.Options{
				Addr:     GlobalConfig.RedisConnect,
				Password: "", // no password set
				DB:       db, // use default DB
			})
		}
	}
	return redisDb[db]
}