亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

跪求!Understand Redis Transaction 求指導!

跪求!Understand Redis Transaction 求指導!

森林海 2019-07-28 12:33:10
疑點如下偽代碼中//其中con客戶端redis鏈接,key1,key2分別是兩個鍵funchandler(con,key1,key2){con.mutl()con.set(key1,value1)//我的疑問是在這里:當本事務執行的過程中,也就是被redis-server執行的過程中,//key2的值沒有沒有可能被改變?在什么情況下才會變?謝謝您的回答con.exec()}MUTL/EXEC執行事務中redis是不是還可以同時改變其他的鍵值?概念理解redis事務的作用:1.保證被事務包含的命令要么全部執行,要么全部不執行(注意:在執行事務的過程中遇到錯誤可能會導致有些命令不能執行).2.保證被事務包含的命令執行時不被打斷.對于第二點來說,于任何客戶端來說啟用多線程來執行被事務包含的代碼沒多大效果;因為redis是一個進程(沒有多線程),也就是說執行體只有一個;同時又因為事務的存在,同一時刻只有一個事務在執行(事務包含命令沒有并行執行),所以說客戶端通過多線程方式執行被redis事務包含的命令作用不大;同時也說明被事務包含的代碼可以防止資源的競爭.偽代碼說明fori=0;i
查看完整描述

2 回答

?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

redis事務其實就是按順序打包運行命令,所以你上面第一條是不成立的,中間有指令失敗,還是會執行前面的指令,所以沒有回滾,也不存在要么全部不執行。第二點是成立的,在事務執行過程中,其他命令是阻塞狀態,等待事務指令全部完成才繼續。
                            
查看完整回答
反對 回復 2019-07-28
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

講一下我的理解:redis有事物,但無原子性multi初始化了一個命令隊列,使該事物的命令以線性存儲,在redis中,對于一個存在問題的命令,如果在入隊的時候就已經出錯,整個事務內的命令將都不會被執行(其后續的命令依然可以入隊),如果這個錯誤命令在入隊的時候并沒有報錯,而是在執行的時候出錯了,那么redis默認跳過這個命令執行后續命令。也就是說,redis只實現了部分事務;一般認為在傳統的關系型數據中,只要有任意一條指令失敗,則整個事務都會被rollback,而在redis的事物中,中間的某條指令的失敗不會導致前面已做指令rollback,也不會造成后續的指令不做。
                            
查看完整回答
反對 回復 2019-07-28
  • 2 回答
  • 0 關注
  • 229 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號