眾所周知,
Redis事務(wù)是為了解決什么問(wèn)題的?
所謂事務(wù),其實(shí)就是在執(zhí)行多個(gè)命令時(shí)要確保一次性都完成,或者都不完成,以此保證數(shù)據(jù)的完整性。
很多人覺(jué)得Redis是單線程的,所以它提交命令時(shí)其它命令無(wú)法操作Redis,其實(shí)這是錯(cuò)誤的認(rèn)知。單線程下命令一個(gè)一個(gè)的提交是能確保事務(wù)的原子性操作,但若執(zhí)行多個(gè)Redis命令時(shí),事務(wù)操作是無(wú)法保證的,所以才有了Redis事務(wù)機(jī)制。
關(guān)系型數(shù)據(jù)庫(kù)都有很強(qiáng)大的事務(wù)支持,而Redis雖然也支持事務(wù),但
Redis事務(wù)特性
Redis開(kāi)啟事務(wù)后,多個(gè)命令會(huì)被放入隊(duì)列中緩存起來(lái),直到執(zhí)行事務(wù)時(shí)。Redis事務(wù)特性如下:
Redis中的事務(wù)并不支持會(huì)滾操作,只能取消事務(wù)!所以原子性支持不完整,數(shù)據(jù)一致性是無(wú)法保證的!! Redis事務(wù)若要支持隔離性需要開(kāi)啟AOF持久化,每次操作都讀寫(xiě),但實(shí)際情況是考慮到性能因素一般不會(huì)開(kāi)啟,所以
持久性也未必能保證; 事務(wù)中若某條命令執(zhí)行失敗,其它的命令依舊會(huì)被執(zhí)行; 事務(wù)執(zhí)行過(guò)程中其它客戶端提交的命令不會(huì)影響本事務(wù)執(zhí)行。
Redis如何使用事務(wù)
在Redis中使用事務(wù)也很簡(jiǎn)單,只有幾個(gè)命令如下:
multi
開(kāi)啟事務(wù)(其實(shí)只是將多條命令封裝為一個(gè)整體去執(zhí)行)exec
執(zhí)行事務(wù)中的命令隊(duì)列discard
取消事務(wù)并清除命令隊(duì)列
以上就是我的觀點(diǎn),對(duì)于這個(gè)問(wèn)題大家是怎么看待的呢?歡迎在下方評(píng)論區(qū)交流~我是科技領(lǐng)域創(chuàng)作者,十年互聯(lián)網(wǎng)從業(yè)經(jīng)驗(yàn),我了解更多科技知識(shí)!