命令
說明備註
multi
使用該命令開啟事務
該命令後的操作指令會進入佇列,並不會直接開始執行
watch key1 [key2……]
監聽某些鍵
當被監聽的鍵的事務執行前被修改,則事務發生回滾。使用樂觀鎖
unwatch key1 [key2……]
取消監聽某些鍵
exec
執行事務命令
如果被監聽的鍵沒有被修改,就執行事務,否則發生回滾
discard
回滾事務命令
回滾進入佇列的事務命令,之後就不能再用exec命令提交了
2.1,沒有新增監聽的基本事務的執行流程
2.1.1 控制台的執行效果
2.1.2 **實現簡單事務流程
public static void main(string args)
};string value = (string) redistemplate.execute(sessioncallback);
system.out.println(value);
}
2.2,新增監聽的事務的執行流程
2.2.1 執行流程圖
2.2.2 新增監視的控制台實現
3.1 redis參考了多執行緒中的cas
3.2 什麼是aba問題redis
的事務操作參考了多執行緒中的cas(比較與交換,compare and swap)
去執行,這是一種樂觀鎖。如:某些資料可能被多個業務所共享,當執行緒t1去執行業務邏輯時,其他共享的執行緒操作改資料,就可能導致多執行緒中資料的不一致情況。為了解決這一問題,執行緒在讀取共享資料前,會對共享資料加上監視,儲存到執行緒的副本中,這就是舊值。而在redis中使用了watch指令去實現這一功能,當事務執行時,去對比舊值,如果不一致就回滾。但是這種操作cas在多執行緒中可能出現
aba問題
。
時間執行緒1
執行緒2操作
t1x=a
-執行緒1加入監控x,此時共享資料x的值為a
t2執行複雜業務邏輯
修改x=b
執行緒2修改x為b
t3執行複雜業務邏輯
執行業務邏輯
執行緒二執行本身的簡單業務邏輯
t4執行複雜業務邏輯
修改x=a
執行緒2修改x為a
t5執行複雜業務邏輯
執行緒2退出
此時x仍然為a
t6與舊值進行比較x=a,舊值未改變
-cas原理檢查通過,舊值未發生變化
當執行到t6的時候,在t2—t5的時刻,執行緒2對於x的修改可能已經導致了執行緒1的業務運算發生了錯誤。但是cas原理對於舊值的檢查顯示舊值未發生改變,因此仍然視作正確的。這就是cas導致的aba問題。
在redis的機制中不會出現aba的問題
。
自己看到了兩個答案,
Redis事務與MySQL事務的區別
1.想著 在springboot事務中,第一步insert mysql 第二步 更新到redis中 transactional rollbackfor public void addchannel meschannelvo meschannelvo 3.測試事務回滾 int i null int i...
Redis的事務與鎖
一.redis事務 redis的事務和傳統關聯式資料庫的事務並不相同。在關聯式資料庫中,使用者首先向資料庫伺服器傳送begin,然後執行各個相互一致的寫操作和讀操作,最後,使用者可以選擇傳送commit來確認之前所做的修改,或者傳送rollback來放棄那些修改。在redis裡面也有簡單的方法可以處...
Redis基礎學習(五) Redis中的事務
redis的單條命令保證原子性,事務不保證原子性!事物的本質 一組命令的集合,乙個事務中所有的命令都會被序列化,在事務執行的過程中,會按照順序進行執行!事務的特性 一次性 單次 順序性 有順序 排他性 排除干擾 redis的事務沒有隔離級別的概念!所有的命令都在事務中,並沒有被立刻執行,只有在發起執...