伴隨著數據量的幾何增長,分佈式已經成為每一個程序員處理數據必須要使用的方式,而分佈式鎖在其中扮演著非常重要的角色 分佈式鎖的實現方式有很多種,比如:
基於數據庫(mysql)實現分佈式鎖
基於緩存(redis)實現分佈式鎖
基於zookeeper實現分佈式鎖
伴隨著數據量的幾何增長,分佈式已經成為每一個程序員處理數據必須要使用的方式,而分佈式鎖在其中扮演著非常重要的角色 分佈式鎖的實現方式有很多種,比如:
基於數據庫(mysql)實現分佈式鎖
基於緩存(redis)實現分佈式鎖
基於zookeeper實現分佈式鎖
Redis使用API setnx實現分佈式鎖,setnx意思是set if not exist, 如果setnx成功返回1,說明獲得鎖,當程序執行完成後刪除鍵到達釋放鎖的目的,如果setnx失敗返回0,說明未獲得鎖,可通過循環等待繼續獲取
如果程序獲得鎖後,斷開了與Redis的連接,鎖未進行釋放,則程序發生死鎖。解決辦法是獲得鎖時,將值設置為鎖的超時時間(當前時間+鎖有效時間),其它線程獲取鎖時,判斷當前時間是否大於超時時間,如果大於先刪除鎖的鍵,再使用setnx更新對應的值。但是當兩個線程同時刪除鎖的鍵時,還是會發生併發問題,所以需使用API getset,getset在設置值的同時會先返回舊值,通過比較舊值是否小於當前時間來判斷程序是否可以獲得鎖
相關推薦
'一文徹底弄懂分佈式事務裡的最終一致性'
"點關注,不迷路;持續更新Java相關技術及資訊!!! 公眾號:Java耕耘者這篇文章將介紹什麼是分佈式事務,分佈式事務解決什麼問題,對分佈式事務實現的難點,解決思路,不同場景下方案的選擇,通過圖解的方式進行梳理、總結和比較。相信耐心看完這篇文章,談到分佈式事務,不再只是有...
'後端開發都應該掌握的Redis基礎'
"原文作者:張君鴻juejin.im/post/5d078cd6f265da1b8466e62cRedis的數據結構Redis支持多種不同的數據結構,包括5種基礎數據結構和幾種比較複雜的數據,這些數據結構可以滿足不同的應用場景。五種基礎數據結構String:字符串,是構建其...
'Redis:Redis數據持久化,及實現方式'
"我們的Redis必須使用數據持久化嗎?如果我們的Redis服務器只作為緩存使用,Redis中存儲的所有數據都是從其他地方同步過來的備份,那麼就沒必要開啟數據持久化的選項。Redis提供了將數據定期自動持久化至硬盤的能力,包括RDB和AOF兩種方案,兩種方案分別有其長處和短...
推薦中...