Note:java
- 該篇討論的只是Redis與MySQL中事務的區別,並不能統一表明NO-SQL與關係型SQL;
- 在 MySQL 中只有使用了
Innodb
數據庫引擎的數據庫或表才支持事務;
MySQL:redis
Redis:spring
Redis之坑:理解Redis事務 中咱們經過類比MySQL的BEGAIN
,COMMIT
,ROLLBACK
來理解Redis的事務命令。可是顯然,它們有着本質區別。數據庫
MySQL:bash
Redis:app
MySQL: 包含兩種spa
Redis:.net
很容易理解,Redis與MySQL中事務的區別其根本緣由就是實現不一樣方式形成的。日誌
MySQL:code
UNDO/REDO日誌
。UNDO日誌
記錄修改前
狀態,ROLLBACK
基於UNDO日誌實現;REDO日誌
記錄修改後
的狀態 ,COMMIT
基於REDO日誌實現;事務開啓
**後執行後的狀態
只是記錄在REDO日誌
,執行COMMIT
以後,數據纔會被寫入磁盤
。int insertSelective = serviceOrderMapper.insertSelective(s);
複製代碼
因此,上述代碼,insertSelective 將會被當即賦值(不管是否開啓事務,只是結果或未被寫入磁盤):
insertSelective = 受影響的行數;
複製代碼
Redis:
COMMANDS隊列
。排隊狀態
(具體依賴於客戶端(例如:spring-data-redis)自身實現)。調用EXCE
纔會執行COMMANDS隊列
。boolean a = redisTemplate.opsForZSet().add("generalService",orderId,System.currentTimeMillis());
複製代碼
上述代碼,