Mysql事務ACID基於日誌sql
AC:回滾日誌實現回滾(原子性)安全
D:重作日誌實現持久化線程
I:加鎖實現隔離級別 (MVVC無鎖機制也可實現可重複讀)日誌
讀未提交
存在問題:髒讀(外部select事務內部)
解決方法:Update寫鎖(排它鎖),select不加鎖,提交事務才釋放
不可重複讀
存在問題:不可重複讀(外部update事務內部)
解決方法:select讀鎖(共享鎖),Update寫鎖(排它鎖)提交事務才釋放
可重複讀
存在問題:幻讀(外部insert事務內部)
解決方法:表鎖?
串行化blog
Mysql事務命令隊列
start transaction;事務
commit;
rollback;get
JDBC的事務操做it
con.setAutoCommit(false);
st = con.createStatement();
con.commit(); con.rollback();io
Redis事務基於隊列
不提供回滾機制
事務中的命令存在隊列中,一次性執行,不被打斷(串行化)
只有當隊列中全部命令都依次執行完後才能獲得每一個結果的返回值
watch(樂觀鎖機制):事務開啓前監視變量,若變量發生變化,則不開啓事務
watch key
val = get key
val = 2 * val
multi
set key val
exec
實現線程安全的2倍乘。