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倍乘。