token机制实现幂等(订单一致性问题)
如何保证订单状态一致性?如何保证接口的幂等性?订单系统保证幂等性?
-
保证幂等性是指保证用户多次重复操作或请求造成的结果是一致的,不会产生任何副作用
1. 幂等实现流程
以订单系统为例,假设用户在付款流程中(此时页面跳转到第三方支付页面),用户在第三方支付成功之后,切换页面回到待付款页面手动关闭订单,此时的订单的状态就出错了,先被更新成已付款状态,后又变更成已关闭,造成了订单状态不一致的现象出现!这种不加任何防护手段的场景,就违背了幂等性的原则
2.代码实现
-
自定义注解
//target表示作用对象,所有类型的方法
-
编写拦截器,处理拦截到的请求
//幂等拦截器
public class MiDengInterceptor implements HandlerInterceptor {
-
在springMVC中配置拦截器
<mvc:interceptor>
<!--拦截的路径所有-->
<mvc:mapping path="/**"/>
<!--不拦共同资源-->
<mvc:exclude-mapping path="/static/**"/>
<!--拦截器的位置-->
<bean class="com.oracle.shop.security.MiDengInterceptor"></bean>
</mvc:interceptor>
-
在需要的方法上添加注解
//取消订单
-
在支付完成后,删除该token,支付完成后的回调页面
//流程执行结束后,删除redis当中的token
redisTemplate.delete("uniqueId"+orders.getId());
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了