分析&回答
通过全局唯一ID
根据业务的操作和内容生成一个全局ID,在执行操作前先根据这个全局唯一ID是否存在,来判断这个操作是否已经执行。如果不存在则把全局ID存储到redis中,继续执行业务。如果存在则表示该方法已经执行,直接返回。适合单一逻辑处理。
状态机控制
有状态机流转的情况下,比如就会订单的创建和付款,订单的付款肯定是在之前,这时我们可以通过在设计状态字段时,使用int类型,并且通过值类型的大小来做幂等,比如订单的创建为0,付款成功为1。付款失败为-1。比如加一个订单操作中6,进入6之后其他非支付流程不能被唤起。
版本控制
同理状态机控制,在数据库中有个 Version 的,在version < x才能继续操作。
反思&扩展
相同思考:分布式系统中的接口调用如何保证顺序性?
喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!