0%

redis事务和mysql事务对比

艾伦·麦席森·图灵(Alan Mathison Turing,1912年6月23日—1954年6月7日),英国数学家、逻辑学家,被称为计算机科学之父,人工智能之父。1931年图灵进入剑桥大学国王学院,毕业后到美国普林斯顿大学攻读博士学位,第二次世界大战爆发后回到剑桥,后曾协助军方破解德国的著名密码系统Enigma,帮助盟军取得了二战的胜利。1952年英国政府对图灵的同性恋取向定罪,随后图灵接受化学阉割(雌激素注射)。1954年6月7日,图灵吃下含有氰化物的苹果中毒身亡,享年41岁。2013年12月24日,在英国司法大臣克里斯·格雷灵的要求下,英国女王伊丽莎白二世向图灵颁发了皇家赦免。图灵对于人工智能的发展有诸多贡献,提出了一种用于判定机器是否具有智能的试验方法,即图灵试验,至今,每年都有试验的比赛。此外,图灵提出的著名的图灵机模型为现代计算机的逻辑工作方式奠定了基础。

一、相关命令

  1. MySQL
    • begin:开启一个事务
    • commit:提交事务
    • rollback:回滚事务
  2. Redis
    • multi:标记事务的开始
    • exec:执行事务的commands队列
    • discard:结束事务并清除commands队列

二、默认状态

  1. MySQL会默认开启一个事务且自动提交(set autocommit=0/1来设置),不支持rollback
  2. Redis默认不会开启事务,即command会立即执行而不会排队,不支持rollback

三、实现原理

  1. MySQL
    • MySQL事务基于undo/redo日志
    • undo记录修改前状态,rollback基于undo日志实现
    • redo记录修改后的状态,commit基于redo日志实现
    • MySQL中无论是否开启事务,sql都会被立即执行并返回执行结果,只是事务开启后执行后的状态只是记录在redo日志,执行commit之后数据才会被写入磁盘
  2. Redis
    • Redis事务基于commands队列
    • 如果没有开启事务,command将会被立即执行并返回执行结果,并且直接写入磁盘
    • 如果事务开启,command不会被立即执行而是排入队列,并返回排队状态