Skip to content
@storage-lock

Storage Lock

🔒 Storage Lock

一个存储后端无关的分布式锁框架 — 基于 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-lock

使用示例(以 MySQL 为例)

package 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

ORM 框架

框架 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

NoSQL

存储 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

嵌入式 / KV 存储

存储 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 🔧 通用工具库

📄 License

MIT License

Copyright (c) 2023 Storage Lock

Pinned Loading

  1. go-storage-lock go-storage-lock Public

    抽象了一套分布式锁的模型定义和算法,可以基于任何存储介质实现分布式锁!只要此存储介质可以被分布式访问即可,比如以数据库为存储介质,以KV为存储介质,以对象存储为存储介质,以任何可读写的服务为存储介质等等。

    Go 1

  2. go-storage go-storage Public

    Storage Lock中的Lock是要存储在Storage上的,这个仓库就是定义了Storage的相关实现规范。

    Go

  3. go-events go-events Public

    Storage Lock底层的事件机制,用于实现锁的可观测性等等。

    Go

Repositories

Showing 10 of 37 repositories

Top languages

Loading…

Most used topics

Loading…