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());
复制代码
上述代码,