真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何解決Redis事務(wù)不支持回滾的問題

本篇內(nèi)容介紹了“如何解決redis事務(wù)不支持回滾的問題”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

我們提供的服務(wù)有:網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、凌河ssl等。為近1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的凌河網(wǎng)站制作公司

redis事務(wù)

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

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

redis事務(wù)和其它數(shù)據(jù)庫事務(wù)的區(qū)別:

1、redis事務(wù)是分為三個階段:開始事務(wù)、命令入隊、執(zhí)行事務(wù)。

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

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

redis命令語法結(jié)構(gòu):

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

2、multi:用于指定redis事務(wù)的開始。

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

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

5、unwatch:取消對watch中key的監(jiān)控。


下面我們通過實例來詳細分析redis事務(wù)的執(zhí)行過程:

例1、redis正常事務(wù)流程:

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

如何解決Redis事務(wù)不支持回滾的問題

例2、取消事務(wù),代碼如下:

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

如何解決Redis事務(wù)不支持回滾的問題

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

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

如何解決Redis事務(wù)不支持回滾的問題

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

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

如何解決Redis事務(wù)不支持回滾的問題

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

首先添加測試數(shù)據(jù),代碼如下:

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

如何解決Redis事務(wù)不支持回滾的問題

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

如何解決Redis事務(wù)不支持回滾的問題

在redis事務(wù)提交時,如果在事務(wù)進入緩存隊列的過程中,watch命令監(jiān)控key的值發(fā)生了變化,則事務(wù)中的命令將都不會被執(zhí)行。同時返回提示事務(wù)使用者事務(wù)執(zhí)行失敗。

“如何解決Redis事務(wù)不支持回滾的問題”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


文章標(biāo)題:如何解決Redis事務(wù)不支持回滾的問題
URL標(biāo)題:http://weahome.cn/article/ihsecs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部