Documentation
¶
Overview ¶
Package dsync 定义分布式同步能力的抽象层,供不同锁实现复用。
可通过 AddIn 从 service context 中获取 IDistSync,并通过 With 配置 锁的过期时间、重试策略等通用行为。
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( // ErrNotAcquired 表示当前句柄没有持有锁,或后端已失去该锁的所有权。 ErrNotAcquired = errors.New("dsync: lock is not acquired") // ErrAlreadyAcquired 表示当前句柄已经在持有或尝试获取锁。 ErrAlreadyAcquired = errors.New("dsync: lock is already acquired") )
View Source
var ( // AddIn 是分布式同步接口的服务级 add-in 描述符,用于查询已安装的具体实现。 AddIn = define.ServiceAddInInterface[IDistSync]() )
View Source
var With _DistMutexOption
With 提供分布式锁的 Option 构造方法。
Functions ¶
This section is empty.
Types ¶
type DistMutexOptions ¶
type DistMutexOptions struct {
Expiry time.Duration // Expiry 是锁租约的有效期。
Tries int // Tries 是后端尝试获取锁的次数。
RetryDelayFunc RetryDelayFunc // RetryDelayFunc 计算相邻重试间隔。
DriftFactor float64 // DriftFactor 是计算有效期时预留的时钟漂移比例。
TimeoutFactor float64 // TimeoutFactor 是单次后端操作占租约时长的比例。
GenUIDFunc GenUIDFunc // GenUIDFunc 为新锁生成所有权 ID。
UID string // UID 显式指定所有权 ID;部分后端不支持。
}
DistMutexOptions 配置分布式锁的租约、重试及所有权标识策略。
type GenUIDFunc ¶ added in v0.3.68
GenUIDFunc 生成锁所有权唯一 ID。
type IDistMutex ¶
type IDistMutex interface {
// Name 返回不含后端键前缀的锁名称。
Name() string
// UID 返回当前锁所有权标识;后端不支持或尚未加锁时可能为空。
UID() string
// Until 返回当前租约的预计失效时间;后端不支持时返回零值。
Until() time.Time
// TryLock 尝试获取锁;重试策略由具体后端和 Option 决定。
TryLock(ctx context.Context) error
// Lock 等待并获取锁;等待受 ctx 及具体后端超时策略约束。
Lock(ctx context.Context) error
// Unlock 释放当前持有的锁。
Unlock(ctx context.Context) error
// Extend 延长当前锁租约;不支持续期的后端会返回错误。
Extend(ctx context.Context) error
}
IDistMutex 表示一个具有实现特定租约语义的分布式互斥锁。 同一个句柄不能并发执行加锁、解锁或续期操作。
type IDistSync ¶
type IDistSync interface {
// NewMutex 创建逻辑名称为 name 的分布式锁句柄;创建本身不会获取锁。
NewMutex(name string, settings ...option.Setting[DistMutexOptions]) IDistMutex
// Separator 返回该后端组织层级锁名称时使用的分隔符。
Separator() string
}
IDistSync 创建特定后端的分布式互斥锁。
Directories
¶
| Path | Synopsis |
|---|---|
|
Package dsync_etcd 提供基于 ETCD 的 dsync add-in 实现。
|
Package dsync_etcd 提供基于 ETCD 的 dsync add-in 实现。 |
|
Package dsync_redis 提供基于 Redis 的 dsync add-in 实现。
|
Package dsync_redis 提供基于 Redis 的 dsync add-in 实现。 |
Click to show internal directories.
Click to hide internal directories.