在日常的開發中,有時我們會遇到這樣的場景:多個人對同乙個資料進行修改操作,導致併發問題發生。這個問題可以通過悲觀鎖來解決,但是悲觀鎖也是有限制的,在某些場景中是不適應的,因為和資料的耦合度太高了,可能會影響到其他業務的操作。而使用redis來解決這一問題是很好的選擇。
redis的儲存指令中有乙個setnx方法,這個方法有乙個特性,就是當鍵不存在的時候,會將這條資料插入,並且返回1,如果這個鍵已經存在了,那麼就不會插入這條資料,並且返回0。
明白了這個實現的原理之後,要實現這個功能就很簡單了。
在事務開啟的時候,我們就去redis中setnx一條資料,這條資料的鍵要和你當前操作的資料有關,這樣就只會鎖定一條資料,而不影響其他資料的業務,例如:做訂單審核的時候,將訂單號+業務簡寫作為鍵。
判斷上面插入操作的返回值,如果返回1,就繼續執行,如果返回0,直接return.
在事務結束之後,將redis中的這條資料刪除。直接使用del(string key)就可以了。
具體實現可以參考:註解的方式實現redis分布式鎖
使用zookeeper實現分布式鎖的示例:zookeeper實現分布式鎖
redis解決併發問題
用redis處理高併發是個很常見的方式,因為redis的訪問效率很高 直接訪問記憶體 一般我們會用來處理 一瞬間的併發量。那如果要使用redis來進行高併發問題的解決的話,應注意以下幾點 1 首先我們要先知道,我們在儲存時,應使用redis的setnx方法,不應該使用set方法,因為setnx擁有原...
利用Redis鎖解決併發問題
用redis處理高併發是個很常見的方式,因為redis的訪問效率很高 直接訪問記憶體 一般我們會用來處理 一瞬間的併發量。那如果要使用redis來進行高併發問題的解決的話,應注意以下幾點 1 首先我們要先知道,我們在儲存時,應使用redis的setnx方法,不應該使用set方法,因為setnx擁有原...
解決 Redis 的併發競爭 Key 問題
1 redis 的併發競爭 key 多個系統同時對乙個 key 進行操作,但是最後執行的順序和我們期望的順序不同,這樣也就導致了結果的不同!2 解決方式 分布式鎖 zookeeper 和 redis 都可以實現分布式鎖 如果不存在 redis 的併發競爭 key 問題,不要使用分布式鎖,這樣會影響效...