Golang的分散式鎖元件,支援Reids,Pgsql或自定義驅動
通用的Golang分散式鎖元件,專案地址:https://github.com/go-locks/d... ,更多使用案例詳見examples
Driver列表
若有意向貢獻未完成的驅動程式碼,請通過ISSUES
或 郵箱[email protected]
聯絡我
Driver | 程式碼完成度 | 測試完成度 | 依賴包 | 使用說明 |
---|---|---|---|---|
redis | 100% | 100% | letsfire/redigo | 詳見README.md |
pgsql | 100% | 100% | lib/pq | 詳見README.md |
etcd | 未完成 | 未測試 | etcd/client | 詳見README.md |
etcdv3 | 未完成 | 未測試 | etcd/clientv3 | 詳見README.md |
方法說明
配置項mutex.OptFunc
以及返回值鎖的使用詳見mutex/README.md
- NewMutex(name string, optFuncs ...mutex.OptFunc) (*mutex.Mutex, error)
建立互斥鎖,若name
已用於建立讀寫鎖則返回error
,本方法單例模式
- NewRWMutex(name string, optFuncs ...mutex.OptFunc) (*mutex.RWMutex, error)
建立讀寫鎖,若name
已用於建立互斥鎖則返回error
,本方法單例模式
注意事項
- 不可重入(如果您有強烈的需求場景,請通過ISSUES 提供反饋)
-
非公平鎖(Golang的本地鎖
sync.Locker
視乎也不是公平鎖,若您有需求或建議,請通過ISSUES 提供反饋) -
有互斥鎖
mutex
和 讀寫鎖rwmutex
兩種型別,具體支援程度詳見各個Driver
對應的README.md
- 本人專案經驗少,實現過程難保欠缺一些場景的考慮,望大家見諒,若能通過ISSUES 提供反饋則感激涕零
- 雖有完整的單元測試,但暫未經過實際專案考驗,故慎用於生產環境,如有問題請通過ISSUES 來共同完善
專案結構
-
主線呼叫層級為
distlock.go
->mutex.go
->driver.go
-
distlock.go
提供了建立鎖的工廠類,單例模式(相同名稱的鎖有且僅有一個,有且僅為一種) -
mutex.go
提供了各類鎖的實現,歡迎各位同學貢獻其他型別鎖,詳見mutex/README.md -
driver.go
提供驅動介面的定義,歡迎各位同學貢獻其他驅動,詳見driver/README.md