redis中的樂觀鎖

redis中的樂觀鎖


前言

上一篇的文章我們說了redis在運行異常的情況下沒法回滾,編譯錯誤的情況下會回滾,其實還有一種情況,即通過加了樂觀鎖的方式。

樂觀鎖,一種輕量級的鎖,通過cas(compare and swap)的操作對值進行修改或者不修改,cas會導致ABA問題,但通過引入版本號可以解決。

實踐

watch..unwatch進行加鎖或者解鎖。一開始設置surplus是40,然後加鎖,開啓事務(這裏我只用了一條命令模擬),設置surplus爲50,通過上篇文章,我們可以知道此事命令只是進入隊列並未執行。

在這裏插入圖片描述

接下來,我開啓了另一個操作界面並連接redis,將surplus設置爲1000,可以執行成功。

在這裏插入圖片描述

此事再來執行事務,你會發現,執行不成功,因爲加了樂觀鎖,在執行的時候發現被修改過了。

在這裏插入圖片描述

在實際運用中,記得當執行失敗後,要進行unwatch,釋放鎖的操作,然後再重新獲取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章