一个存储后端无关的分布式锁框架 — 基于 Go 语言实现,通过抽象 Storage 接口,支持任何可分布式访问的存储介质来实现分布式锁。
Storage Lock 抽象了一套分布式锁的模型定义和算法,将锁逻辑与存储后端完全解耦。只要存储介质可以被分布式访问,就可以作为锁的存储后端——无论是关系型数据库、NoSQL、对象存储、分布式文件系统还是内存存储。
核心思路:
┌─────────────────────────────────────────────┐
│ 应用层 (Application) │
│ HTTP API / gRPC API / CLI / UI / SDK │
├─────────────────────────────────────────────┤
│ 锁核心 (go-storage-lock) │
│ 可重入锁 / 乐观锁 / 看门狗续期 / 事件通知 │
├─────────────────────────────────────────────┤
│ 存储抽象 (go-storage) │
│ Storage 接口 / LockInformation 模型 │
├─────────────────────────────────────────────┤
│ 存储实现 (Storage Impl) │
│ MySQL / Redis / MongoDB / S3 / ... 50+ 种 │
└─────────────────────────────────────────────┘
- 🔄 存储后端无关 — 同一套锁逻辑可运行在 50+ 种不同的存储后端上
- 🔁 可重入锁 — 支持同一线程/协程多次获取同一把锁,按加锁次数释放
- 🔒 乐观锁(CAS) — 基于版本号的乐观锁机制,避免 ABA 问题
- 🐕 看门狗(Watch Dog) — 自动续期机制,防止业务未完成时锁过期
- 📡 事件通知 — 锁的获取、释放等事件可通过事件监听器处理
- 🏭 工厂模式 — 通过 Factory 便捷创建锁实例
- 📊 监控集成 — 内置 Prometheus 指标支持
go get -u github.com/storage-lock/go-storage-lockpackage main
import (
"context"
"log"
mysql_storage "github.com/storage-lock/go-mysql-storage"
mysql_locks "github.com/storage-lock/go-mysql-locks"
storage_lock "github.com/storage-lock/go-storage-lock"
)
func main() {
// 1. 创建 Storage
storage, err := mysql_storage.NewMysqlStorage(mysql_storage.NewMysqlStorageOptions{
Host: "127.0.0.1",
Port: 3306,
Username: "root",
Password: "password",
Database: "test",
})
if err != nil {
log.Fatal(err)
}
// 2. 创建 Lock
lock, err := mysql_locks.NewMysqlLocks(mysql_locks.NewMysqlLocksOptions{
Storage: storage,
})
if err != nil {
log.Fatal(err)
}
// 3. 加锁
err = lock.Lock(context.Background(), "my-lock-key")
if err != nil {
log.Fatal(err)
}
defer lock.Unlock(context.Background(), "my-lock-key")
// 4. 执行业务逻辑...
}| 存储 | Storage 包 | Locks 包 |
|---|---|---|
| MySQL | go-mysql-storage | go-mysql-locks |
| PostgreSQL | go-postgresql-storage | go-postgresql-locks |
| MariaDB | go-mariadb-storage | go-mariadb-locks |
| SQL Server | go-sqlserver-storage | go-sqlserver-locks |
| TiDB | go-tidb-storage | go-tidb-locks |
| Oracle | go-oracle-storage | — |
| SQLite3 | go-sqlite3-storage | — |
| OceanBase | go-oceanbase-storage | — |
| 达梦 (Dameng) | go-dameng-storage | — |
| ClickHouse | go-clickhouse-storage | — |
| Percona | go-percona-storage | — |
| Snowflake | go-snowflake-storage | — |
| DB2 | go-db2-storage | — |
| Sybase | go-sybase-storage | — |
| Teradata | go-teradata-storage | — |
| Firebird | go-firebird-storage | — |
| Access | go-access-storage | — |
| 框架 | Locks 包 |
|---|---|
| GORM | go-gorm-locks |
| sqlx | go-sqlx-locks |
| xorm | go-xorm-locks |
| gorp | go-gorp-locks |
| beego | go-beego-locks |
| *sql.DB 通用 | go-sqldb-locks |
| 存储 | Storage 包 | Locks 包 |
|---|---|---|
| MongoDB | go-mongodb-storage | go-mongodb-locks |
| Redis | go-redis-storage | — |
| HBase | go-hbase-storage | — |
| Cassandra | go-cassandra-storage | — |
| Memcache | go-memcache-storage | — |
| DynamoDB | go-dynamodb-storage | — |
| InfluxDB | go-influxdb-storage | — |
| 存储 | Storage 包 |
|---|---|
| S3 | go-s3-storage |
| MinIO | go-minio-storage |
| Ceph | go-ceph-storage |
| 阿里云 OSS | go-oss-storage |
| 腾讯云 COS | go-cos-storage |
| 百度云 BOS | go-bos-storage |
| 七牛云 Kodo | go-kodo-storage |
| 华为云 OBS | go-obs-storage |
| 金山云 KS3 | go-ks3-storage |
| 又拍云 USS | go-uss-storage |
| 青云 QingStor | go-qingcloud-object-storage |
| US3 | go-us3-storage |
| Zenko | go-zenko-storage |
| 存储 | Storage 包 |
|---|---|
| LevelDB | go-leveldb-storage |
| RocksDB | go-rocksdb-storage |
| BerkeleyDB | go-berkeleydb-storage |
| LedisDB | go-ledisdb-storage |
| 内存 | go-memory-storage |
| 存储 | Storage 包 |
|---|---|
| HDFS | go-hdfs-storage |
| GlusterFS | go-glusterfs-storage |
| JuiceFS | go-juicefs-storage |
| FastDFS | go-fastdfs-storage |
| TFS | go-tfs-storage |
| MooseFS | go-moosefs-storage |
| FTP | go-ftp-storage |
| 存储 | Storage 包 |
|---|---|
| Jackrabbit | go-jackrabbit-storage |
| ModeShape | go-mode-shape-storage |
| CAS | go-cas-storage |
| Triton | go-triton-storage |
| LeoFS | go-leofs-storage |
| Riak S2 | go-riak-s2-storage |
| KV 通用 | go-kv-storage |
| HTTP | go-http-storage |
| 项目 | 说明 |
|---|---|
| go-storage-lock | 🔒 核心库 — 分布式锁模型定义与算法实现 |
| go-storage | 🗄️ 存储抽象接口定义 |
| storage-lock-http-api | 🌐 HTTP API 服务 |
| storage-lock-grpc-api | ⚡ gRPC API 服务 |
| storage-lock-cli | 💻 命令行工具 |
| storage-lock-ui | 🖥️ Web UI 管理界面 |
| java-storage-lock | ☕ Java SDK |
| python-storage-lock | 🐍 Python SDK |
| go-storage-lock-factory | 🏭 工厂模式创建锁 |
| go-storage-lock-metric | 📊 监控指标 |
| go-storage-lock-prometheus | 📈 Prometheus 集成 |
| go-ntp-time-provider | 🕐 NTP 时间提供者 |
| go-events | 📡 事件系统 |
| go-storage-events | 📡 存储事件 |
| go-event-listener-stdout | 📋 标准输出事件监听器 |
| go-zap-logger-event-listener | 📋 Zap 日志事件监听器 |
| go-utils | 🔧 通用工具库 |
Copyright (c) 2023 Storage Lock