91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決Redis事務不支持回滾的問題

發布時間:2021-10-09 15:03:22 來源:億速云 閱讀:213 作者:iii 欄目:編程語言

本篇內容介紹了“如何解決Redis事務不支持回滾的問題”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

redis事務

任何數據庫都要有一套自己的事務控制機制,redis事務是一次可以執行多個命令,它的本質是一組命令的集合。一個事務中所有的命令都會被序列化,在事務執行的過程中會按照順序執行隊列中的命令。其它客戶端提交的命令請求會等到事務執行完畢再執行。

總的來說:redis事務就是一次性、順序性、排他性的執行一個隊列中的一系列命令,所以Redis實戰筆記你得先看懂!

redis事務和其它數據庫事務的區別:

1、redis事務是分為三個階段:開始事務、命令入隊、執行事務。

2、redis事務不具有隔離級別的概念:redis在發送exec命令之前,命令操作只是被放入到隊列緩存當中,并不會被實際執行,因此也就不能類似關系型數據中,在事務內查詢已經變更的操作,事務外的客戶端更不能查詢到事務內的數據。

3、redis事務是不保證原子性的:redis事務只保證在命令格式只有在都正確的情況下才會都執行,要不就都不執行命令。但是事務的整體是不保證原子性的,且沒有回滾,當事務中任意一個命令執行失敗,其余的命令依然會執行。

redis命令語法結構:

1、watch key1 key2等等:監視一個或者多個KEY,如果在事務執行的時候,key的值被其它命令改動,則事務被打斷,全部不執行,redis通過該機制完成事務的樂觀鎖。

2、multi:用于指定redis事務的開始。

3、exec:用于指定redis事務開始執行(順序、一次性執行所有事務中的命令),一旦執行exec,前面加的監控鎖都會被取消。

4、discard:用于取消事務。放棄事務中的所有命令。

5、unwatch:取消對watch中key的監控。


下面我們通過實例來詳細分析redis事務的執行過程:

例1、redis正常事務流程:

multi
set key1 hello
set key2 free
set key3 world
get key2
exec

如何解決Redis事務不支持回滾的問題

例2、取消事務,代碼如下:

multi
set key1 hello_1
set key2 free_1
set key3 world_1
discard
get key3

如何解決Redis事務不支持回滾的問題

例3、redis事務中某個命令出錯(即不存在的命令,不是語法出錯)時,事務中的所有命令都不會執行,代碼如下:

multi
set key1 hello_1
setok key2 free_1
set key3 world_1
get key3
exec

如何解決Redis事務不支持回滾的問題

例4、redis事務中存在某個命令具有語法性錯誤,執行exec時,其它命令照樣執行,代碼如下:

multi
incr key1 
set key2 free_1
set key3 world_1
get key3
exec

如何解決Redis事務不支持回滾的問題

例5、利用watch監控某個key值的變化,來做redis事務的樂觀鎖。模擬keya賬戶中有100塊錢,keyb賬戶有20塊錢,然后a向b轉了50塊錢。

首先添加測試數據,代碼如下:

set keya 100
set keyb 20 
watch keya 
multi
decrby keya 50
incrby keyb 50
exec 
get keya

如何解決Redis事務不支持回滾的問題

然后,我們打開第二個客戶端,在事務執行(exec)之前,對a賬戶提前減少50塊錢,看下watch的樂觀鎖機制是否生效,代碼如下:

如何解決Redis事務不支持回滾的問題

在redis事務提交時,如果在事務進入緩存隊列的過程中,watch命令監控key的值發生了變化,則事務中的命令將都不會被執行。同時返回<nil>提示事務使用者事務執行失敗。

“如何解決Redis事務不支持回滾的問題”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

腾冲县| 静乐县| 浦江县| 同仁县| 桂平市| 娄底市| 浦县| 明溪县| 公主岭市| 铁力市| 清水县| 天水市| 萨迦县| 襄樊市| 灵武市| 邹城市| 太仆寺旗| 东丽区| 孟津县| 台南县| 黄冈市| 修文县| 鄯善县| 潞城市| 东平县| 青河县| 平泉县| 平邑县| 九龙县| 康定县| 灵川县| 察隅县| 乡城县| 南川市| 苍梧县| 邵东县| 黄浦区| 顺义区| 凤冈县| 依兰县| 犍为县|