redis如何防止并發?
Redis是當前炙手可熱的NoSQLhttps://www.b5b6.com/shujuku/,幾乎已經成為高并發、高可用系統的標配了。對Redis響應快的認知不能僅僅停留在基于內存和單線程的層面。
在一些對高并發請求有限制的系統或者功能里,比如說秒殺活動,或者一些網站返回的當前用戶過多,請稍后嘗試。這些都是通過對同一時刻請求數量進行了限制,一般用作對后臺系統的保護,防止系統因為過大的流量沖擊而崩潰。對于系統崩潰帶來的后果,顯然還是拒絕一部分請求更能被維護者所接受。
而在各種限流中,除了系統自身設計的帶鎖機制的計數器外,利用Redis實現顯然是一種既高效安全又便捷方便的方式。
客戶端加鎖(ReentrantLock或synchronized)但此方式只限于單機加鎖,無法解決分布式系統的并發競爭問題。
樂觀鎖(redis 的命令 watch)當執行多鍵值事務操作時,Redis 不僅要求這些鍵值需要落在同一個 Redis 實例上,還要求落在同一個 slot 上,所以 redis 的事務比較雞肋,不過可以想辦法遵循 redis 內部的分片算法把設計到的所有 key 分到同一個 slot。redis 的 setnx 實現分布式鎖要設置超時時間,防止搶占到鎖的客戶端因失敗、崩潰或其他原因沒有辦法釋放鎖而造成死鎖。如有不同觀點,歡迎發表評論。如果喜歡我的回答,歡迎“點贊、分享”。
上一篇java生成word文檔
下一篇css如何把圖片剪成圓形