這篇文章給大家介紹redis數據庫怎么利用go-redis實現一個分布式鎖,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
網站建設哪家好,找創新互聯!專注于網頁設計、網站建設、微信開發、成都微信小程序、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了聊城免費建站歡迎大家使用!分布式鎖的幾個原則;
1.「鎖的互斥性」:在分布式集群應用中,共享資源的鎖在同一時間只能被一個對象獲取。
2. 「可重入」:為了避免死鎖,這把鎖是可以重入的,并且可以設置超時。
3. 「高效的加鎖和解鎖」:能夠高效的加鎖和解鎖,獲取鎖和釋放鎖的性能也好。
4. 「阻塞、公平」:可以根據業務的需要,考慮是使用阻塞、還是非阻塞,公平還是非公平的鎖。
redis實現分布式鎖主要靠setnx命令
1. 當key存在時失敗 , 保證互斥性
2.設置了超時 , 避免死鎖
3.利用mutex保證當前程序不存在并發沖突問題
package redis import ( "context" "github.com/go-redis/redis/v8" "github.com/taoshihan1991/miaosha/setting" "log" "sync" "time" ) var rdb *redis.Client var ctx = context.Background() var mutex sync.Mutex func NewRedis() { rdb = redis.NewClient(&redis.Options{ Addr: setting.Redis.Ip + ":" + setting.Redis.Port, Password: "", // no password set DB: 0, // use default DB }) } func Lock(key string) bool { mutex.Lock() defer mutex.Unlock() bool, err := rdb.SetNX(ctx, key, 1, 10*time.Second).Result() if err != nil { log.Println(err.Error()) } return bool } func UnLock(key string) int64 { nums, err := rdb.Del(ctx, key).Result() if err != nil { log.Println(err.Error()) return 0 } return nums }
分享名稱:redis數據庫怎么利用go-redis實現一個分布式鎖-創新互聯
URL鏈接:http://vcdvsql.cn/article16/didddg.html
成都網站建設公司_創新互聯,為您提供標簽優化、品牌網站設計、自適應網站、域名注冊、網站收錄、云服務器
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯