spark-server/internal/module/squarebot/logic/lock.go
DESKTOP-L8OUL9F\gfl0034 5fda6be8ec feat(squarebot): 接入媒体引导与 Bot 附件/锁
完善 bootstrap 媒体装配、配置开关,并补充 squarebot 附件与锁逻辑。
2026-09-24 23:37:44 +08:00

31 lines
563 B
Go

package logic
import (
"context"
"time"
"github.com/redis/go-redis/v9"
)
// RedisLocker uses SET NX EX so multi-instance servers only run one tick.
type RedisLocker struct {
rdb *redis.Client
}
func NewRedisLocker(rdb *redis.Client) *RedisLocker {
if rdb == nil {
return nil
}
return &RedisLocker{rdb: rdb}
}
func (l *RedisLocker) TryLock(ctx context.Context, key string, ttl time.Duration) (bool, error) {
if l == nil || l.rdb == nil {
return true, nil
}
if ttl <= 0 {
ttl = time.Minute
}
return l.rdb.SetNX(ctx, key, "1", ttl).Result()
}