Golang的分散式鎖元件,支援Reids,Pgsql或自定義驅動

letsfire發表於2019-01-27

通用的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

相關文章