您现在的位置是:主页 > 数据库技术 > 数据库技术

怎么解析分布式事务

IDCBT2022-01-14服务器技术人已围观

简介怎么解析分布式事务,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 前言 事务想必大家并不陌生,至于什么

怎么解析分布式事务,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

 前言

事务想必大家并不陌生,至于什么是 ACID,也是老生常谈了。不过暖男为了保证文章的完整性确保所有人都听得懂,我还是得先说说  ACID,然后再来介绍下什么是分布式事务和常见的分布式事务包括 2PC、3PC、TCC、本地消息表、消息事务、最大努力通知。

事务

严格意义上的事务实现应该是具备原子性、一致性、隔离性和持久性,简称 ACID。

    原子性(Atomicity),可以理解为一个事务内的所有操作要么都执行,要么都不执行。

    一致性(Consistency),可以理解为数据是满足完整性约束的,也就是不会存在中间状态的数据,比如你账上有400,我账上有100,你给我打200块,此时你账上的钱应该是200,我账上的钱应该是300,不会存在我账上钱加了,你账上钱没扣的中间状态。

    隔离性(Isolation),指的是多个事务并发执行的时候不会互相干扰,即一个事务内部的数据对于其他事务来说是隔离的。

    持久性(Durability),指的是一个事务完成了之后数据就被永远保存下来,之后的其他操作或故障都不会对事务的结果产生影响。

    而通俗意义上事务就是为了使得一些更新操作要么都成功,要么都失败。

    说到这里可能有人会说,不对啊 Redis 的事务不能保证所有操作要么都执行要么都不执行,为什么它也叫事务啊?

    首先你要知晓一般的中间件都会夸大其效果,人家团队也是想更出名,吸引更多的人来使用他们的产品,所以我们得以辩证的角度来看待。

    一般而言他们既然敢说出他们实现了什么什么,要么是真的实现了,要么是在某种特殊、定制或者极端的条件下才能满足功能。

    我们来看看 Redis 怎么说的。

    这句话就是告诉大家事务中的某个命令失败了,之后的命令还是会被处理,Redis 不会停止命令,意味着也不会回滚。

    你说这不是扯嘛?这都偏离事务最核心的本意了啊。

    别急,咱们来看看 Redis 怎么解释的。

    Redis  官网解释了为什么不支持回滚,他们说首先如果命令出错那都是语法使用错误,是你们自己编程出错,而且这种情况应该在开发的时候就被检测出来,不应在生产环境中出现。

    然后 Redis 就是为了快!不需要提供回滚。

    下面还有一段话我就不截图了,就是说就算提供回滚也没用,你这代码都写错了,回滚并不能使你免于编程错误。而且一般这种错也不可能进入到生产环境,所以选择更加简单、快速的方法,我们不支持回滚。

    你看看这说的好像很有道理,我们不提供回滚,因为我们不需要为你的编程错误买单!

    标签:

    很赞哦! ()

本栏推荐