乐趣区

关于java:Java面试什么是幂等如何解决幂等性问题

一个在传统行业工作了 7 年的粉丝私信我。

他最近去很多互联网公司面试,遇到的很多技术和概念都没听过。

其中就有一道题是:”什么是幂等、如何解决幂等性问题“?

他说,这个概念听都没听过,怎么可能答复进去。

好的,对于这个问题,看看普通人和高手的答复。

普通人:

嗯。。。。。。。。。。。。。。

高手:

好的。

所谓幂等,其实它是一个数学上的概念,在计算机编程畛域中,幂等是指一个办法被多次重复执行的时候产生的影响和第一次执行的影响雷同。

之所以要思考到幂等性问题,是因为在网络通信中,存在两种行为可能会导致接口被反复执行。

  1. 用户的反复提交或者用户的歹意攻打,导致这个申请会被多次重复执行。
  2. 在分布式架构中,为了防止网络通信导致的数据失落,在服务之间进行通信的时候都会设计超时重试的机制,而这种机制有可能导致服务端接口被反复调用。

所以在程序设计中,对于数据变更类操作的接口,须要保障接口的幂等性。

而幂等性的核心思想,其实就是保障这个接口的执行后果只影响一次,后续即使再次调用,也不能对数据产生影响,所以基于这样一个诉求,常见的解决办法有很多。

  1. 应用数据库的惟一束缚实现幂等,比方对于数据插入类的场景,比方创立订单,因为订单号必定是惟一的,所以如果是屡次调用就会触发数据库的惟一束缚异样,从而防止一个申请创立多个订单的问题。
  2. 应用 redis 外面提供的 setNX 指令,比方对于 MQ 生产的场景,为了防止 MQ 反复生产导致数据屡次被批改的问题,能够在承受到 MQ 的音讯时,把这个音讯通过 setNx 写入到 redis 外面,一旦这个音讯被生产过,就不会再次生产。
  3. 应用状态机来实现幂等,所谓的状态机是指一条数据的残缺运行状态的转换流程,比方订单状态,因为它的状态只会向前变更,所以屡次批改同一条数据的时候,一旦状态产生变更,那么对这条数据批改造成的影响只会产生一次。

当然,除了这些办法以外,还能够基于 token 机制、去重表等办法来实现,然而不论是什么办法,无非就是两种,

  • 要么就是接口只容许调用一次,比方惟一束缚、基于 redis 的锁机制。
  • 要么就是对数据的影响只会触发一次,比方幂等性、乐观锁

以上就是我对这个问题的了解。

总结

技术这个行业的倒退是很快的,如果本人的技术能力和认知跟不上变动。

那基本上能够说是被时代淘汰了,所以放弃继续学习是十分重要的。

喜爱我的作品的小伙伴记得点赞和珍藏。

如果你在面试的时候遇到一些不懂的问题,能够随时来私信我

版权申明:本博客所有文章除特地申明外,均采纳 CC BY-NC-SA 4.0 许可协定。转载请注明来自 Mic 带你学架构
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!

退出移动版