54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
package redis
|
||
|
||
import (
|
||
"context"
|
||
"fmt"
|
||
"github.com/qit-team/snow-core/redis"
|
||
"time"
|
||
)
|
||
|
||
// AcquireLock 尝试获取分布式锁
|
||
func AcquireLock(key string, expired time.Duration) (bool, error) {
|
||
ctx := context.Background()
|
||
client := redis.GetRedis()
|
||
// 设置锁的值,这里可以是一个随机的UUID,用于检测是否是同一个客户端持有的锁锁
|
||
lockValue := fmt.Sprintf("%d", time.Now().UnixNano())
|
||
result := client.SetNX(ctx, key, lockValue, expired)
|
||
return result.Val(), result.Err()
|
||
}
|
||
|
||
func Del(key string) error {
|
||
client := redis.GetRedis()
|
||
result := client.Del(context.Background(), key)
|
||
return result.Err()
|
||
}
|
||
|
||
func Set(key string, value interface{}, expired time.Duration) error {
|
||
client := redis.GetRedis()
|
||
return client.Set(context.Background(), key, value, expired).Err()
|
||
}
|
||
|
||
func Get(key string) (string, error) {
|
||
client := redis.GetRedis()
|
||
result := client.Get(context.Background(), key)
|
||
return result.Result()
|
||
}
|
||
|
||
func Decr(key string) (int64, error) {
|
||
client := redis.GetRedis()
|
||
result := client.Decr(context.Background(), key)
|
||
return result.Result()
|
||
}
|
||
|
||
func Incr(key string) (int64, error) {
|
||
client := redis.GetRedis()
|
||
result := client.Incr(context.Background(), key)
|
||
return result.Result()
|
||
}
|
||
|
||
func SetNX(key string, value interface{}, expired time.Duration) (bool, error) {
|
||
client := redis.GetRedis()
|
||
result := client.SetNX(context.Background(), key, value, expired)
|
||
return result.Result()
|
||
}
|