package redis

import (
	"context"
	"time"
)

// Get 获取
func Get(key string) (string, error) {
	return client.Get(context.Background(), key).Result()
}

// Set 设置
func Set(key string, value string, duration time.Duration) error {
	_, err := client.Set(context.Background(), key, value, duration).Result()
	return err
}

// Has 判断key是否存在
func Has(key string) (bool, error) {
	c, err := client.Exists(context.TODO(), key).Result()
	return c > 0, err
}

// Remove 删除缓存
func Remove(key string) error {
	return client.Del(context.Background(), key).Err()
}

// BaseLock 基础分布式锁
func BaseLock(key string, value string, duration time.Duration) bool {
	result := client.SetNX(context.Background(), key, value, duration)
	return result.Val()
}

// Lock 分布式执行函数
func Lock(key string, duration time.Duration, handle func()) {
	result := client.SetNX(context.Background(), key, "0", duration)
	if result.Val() {

		//defer func() {
		//	err := Remove(key)
		//	if err != nil {
		//		fmt.Println("Lock_remove_err ", err)
		//	}
		//}()

		handle()
	}
}