Documentation
¶
Overview ¶
Package lockmgr 提供统一的锁管理功能,支持 Redis 和 Memory 两种驱动。
核心特性:
- 多驱动支持:支持 Redis(分布式锁)、Memory(本地内存锁)两种锁驱动
- 统一接口:提供统一的 ILockManager 接口,便于切换锁实现
- 可观测性:内置日志、指标和链路追踪支持
- 自动过期:支持锁的自动过期机制,防止死锁
- 非阻塞模式:TryLock 支持非阻塞获取锁
基本用法:
// 使用内存锁
mgr := lockmgr.NewLockManagerMemoryImpl(&lockmgr.MemoryLockConfig{})
defer mgr.Close()
ctx := context.Background()
// 获取锁(阻塞)
err := mgr.Lock(ctx, "resource:123", 10*time.Second)
if err != nil {
log.Fatal(err)
}
// 执行需要加锁的操作
// ...
// 释放锁
mgr.Unlock(ctx, "resource:123")
使用 Redis 分布式锁:
cfg := &lockmgr.RedisLockConfig{
Host: "localhost",
Port: 6379,
Password: "",
DB: 0,
}
mgr := lockmgr.NewLockManagerRedisImpl(cfg)
defer mgr.Close()
非阻塞获取锁:
// 尝试获取锁(非阻塞)
locked, err := mgr.TryLock(ctx, "resource:123", 10*time.Second)
if err != nil {
log.Fatal(err)
}
if locked {
// 成功获取锁
// 执行需要加锁的操作
// ...
// 释放锁
mgr.Unlock(ctx, "resource:123")
} else {
// 锁已被占用
log.Println("锁已被占用")
}
配置驱动类型:
// 通过 Build 函数创建
mgr, err := lockmgr.Build("memory", map[string]any{
"max_backups": 1000,
})
// 通过配置提供者创建
mgr, err := lockmgr.BuildWithConfigProvider(configProvider)
使用场景:
- 分布式环境下的资源互斥访问
- 并发控制,防止重复操作
- 任务队列的任务消费
- 限流控制
Index ¶
- Constants
- func ValidateContext(ctx context.Context) error
- func ValidateKey(key string) error
- type ILockManager
- func Build(driverType string, driverConfig map[string]any, ...) (ILockManager, error)
- func BuildWithConfigProvider(configProvider configmgr.IConfigManager, loggerMgr loggermgr.ILoggerManager, ...) (ILockManager, error)
- func NewLockManagerMemoryImpl(loggerMgr loggermgr.ILoggerManager, ...) ILockManager
- func NewLockManagerRedisImpl(loggerMgr loggermgr.ILoggerManager, ...) ILockManager
- type LockConfig
- type MemoryLockConfig
- type RedisLockConfig
Constants ¶
View Source
const ( // 默认值 DefaultRedisHost = "localhost" DefaultRedisPort = 6379 DefaultRedisDB = 0 DefaultRedisMaxIdleConns = 10 DefaultRedisMaxOpenConns = 100 DefaultRedisConnMaxLifetime = 30 * time.Second DefaultMemoryMaxBackups = 1000 )
Variables ¶
This section is empty.
Functions ¶
Types ¶
type ILockManager ¶
type ILockManager interface {
common.IBaseManager
// Lock 获取锁(阻塞直到成功或超时)
// ctx: 上下文
// key: 锁的键
// ttl: 锁的过期时间
// 返回: 成功获取锁返回 nil,否则返回错误
Lock(ctx context.Context, key string, ttl time.Duration) error
// Unlock 释放锁
// ctx: 上下文
// key: 锁的键
Unlock(ctx context.Context, key string) error
// TryLock 尝试获取锁(非阻塞)
// ctx: 上下文
// key: 锁的键
// ttl: 锁的过期时间
// 返回: 成功返回 true,失败返回 false
TryLock(ctx context.Context, key string, ttl time.Duration) (bool, error)
}
ILockManager 锁管理器接口
func Build ¶
func Build( driverType string, driverConfig map[string]any, loggerMgr loggermgr.ILoggerManager, telemetryMgr telemetrymgr.ITelemetryManager, cacheMgr cachemgr.ICacheManager, ) (ILockManager, error)
Build 创建锁管理器实例 参数:
- driverType: 驱动类型 ("redis", "memory")
- driverConfig: 驱动配置 (根据驱动类型不同而不同)
- loggerMgr: 日志管理器
- telemetryMgr: 遥测管理器
- cacheMgr: 缓存管理器(Redis 模式必需,Memory 模式可以为 nil)
返回 ILockManager 接口实例和可能的错误
func BuildWithConfigProvider ¶
func BuildWithConfigProvider( configProvider configmgr.IConfigManager, loggerMgr loggermgr.ILoggerManager, telemetryMgr telemetrymgr.ITelemetryManager, cacheMgr cachemgr.ICacheManager, ) (ILockManager, error)
BuildWithConfigProvider 从配置提供者创建锁管理器实例 自动从配置提供者读取 lock.driver 和对应驱动配置 参数:
- configProvider: 配置提供者
- loggerMgr: 日志管理器
- telemetryMgr: 遥测管理器
- cacheMgr: 缓存管理器(Redis 模式必需,Memory 模式可以为 nil)
返回 ILockManager 接口实例和可能的错误
func NewLockManagerMemoryImpl ¶
func NewLockManagerMemoryImpl( loggerMgr loggermgr.ILoggerManager, telemetryMgr telemetrymgr.ITelemetryManager, config *MemoryLockConfig, ) ILockManager
NewLockManagerMemoryImpl 创建内存锁管理器实例 参数:
- loggerMgr: 日志管理器
- telemetryMgr: 遥测管理器
- config: 内存锁配置
@return ILockManager 锁管理器接口
func NewLockManagerRedisImpl ¶
func NewLockManagerRedisImpl( loggerMgr loggermgr.ILoggerManager, telemetryMgr telemetrymgr.ITelemetryManager, cacheMgr cachemgr.ICacheManager, config *RedisLockConfig, ) ILockManager
NewLockManagerRedisImpl 创建Redis锁管理器实例 参数:
- loggerMgr: 日志管理器
- telemetryMgr: 遥测管理器
- cacheMgr: 缓存管理器
- config: Redis锁配置
@return ILockManager 锁管理器接口
type LockConfig ¶
type LockConfig struct {
Driver string `yaml:"driver"` // 驱动类型: redis, memory
RedisConfig *RedisLockConfig `yaml:"redis_config"` // Redis 配置
MemoryConfig *MemoryLockConfig `yaml:"memory_config"` // Memory 配置
}
LockConfig 锁配置
func ParseLockConfigFromMap ¶
func ParseLockConfigFromMap(cfg map[string]any) (*LockConfig, error)
ParseLockConfigFromMap 从 ConfigMap 解析锁配置
type MemoryLockConfig ¶
type MemoryLockConfig struct {
MaxBackups int `yaml:"max_backups"` // 最大备份项数(清理策略相关)
}
MemoryLockConfig 内存锁配置
type RedisLockConfig ¶
type RedisLockConfig struct {
Host string `yaml:"host"` // Redis 主机地址
Port int `yaml:"port"` // Redis 端口
Password string `yaml:"password"` // Redis 密码
DB int `yaml:"db"` // Redis 数据库编号
MaxIdleConns int `yaml:"max_idle_conns"` // 最大空闲连接数
MaxOpenConns int `yaml:"max_open_conns"` // 最大打开连接数
ConnMaxLifetime time.Duration `yaml:"conn_max_lifetime"` // 连接最大存活时间
}
RedisLockConfig Redis 锁配置
Click to show internal directories.
Click to hide internal directories.