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()
|
|||
|
}
|