通用的Golang分散式鎖元件,專案地址:https://github.com/go-locks/d…,更多使用案例詳見 examples
Driver列表
若有意向貢獻未完成的驅動程式碼,請通過 ISSUES 或 郵箱 249008728@qq.com
聯絡我
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