当前位置: 首页 > article >正文

Java分布式幂等性怎么设计?

在高并发的场景的架构中,幂等性是必须得保证的。比如说支付功能,用户发起支付,如果后台没有坐幂等性校验,刚好用户手抖多点了几下,于是后台就有可能多次收到同一个请求,不做幂等性校验很容易就让用户重复支付,这样用户是不能忍的。

解决方案:

1,查询和删除不在幂等讨论范围,查询肯定没有幂等的说,删除:第一次删除成功后,后面来删除直接返回0,也是返回成功。

2,建唯一索引:唯一索引或唯一组合索引来防止新增数据存在脏数据(当表存在唯一索引,并发时新增异常时,再查询一次就可以了,数据应该已经存在了,返回结果即可)。

3,token机制:由于重复点击或者网络重发,或者nginx重发等情况会导致数据被重复提交。前端在数据提交前要向后端服务的申请token,token放到 Redis 或 JM 内存,token有效时间。提交后后台校验token,同时删除token,生成新的token返回。redis要用删除操作来判断token,删除成功代表token校验通过,如果用select+delete来校验token,存在并发问题,不建议使用。

4,悲观锁悲观锁使用时一般伴随事务一起使用,数据锁定时间可能会很长,根据实际情况选用(另外还要考虑id是否为主键,如果id不是主键或者不是 InnoD8 存储引擎,那么就会出现锁全表)。for update

5,乐观锁,给数据库表增加一个version字段,可以通过这个字段来判断是否已经被修改了

6,分布式锁,比如 Redis、Zookeeper 的分布式锁。单号为key,然后给Key设置有效期(防止支付失败后,锁一直不释放),来一个请求使用订单号生成一把锁,业务代码执行完成后再释放锁。

7,保底方案,先查询是否存在此单,不存在进行支付,存在就直接返回支付结果。


http://www.kler.cn/a/543490.html

相关文章:

  • DeepSeek模型R1服务器繁忙,怎么解决?
  • 深度学习入门--python入门1
  • 波导阵列天线学习笔记8 高增益、低轴比的3D打印Ka波段圆极化单脉冲天线阵列
  • 研发管理知识
  • pytest测试专题 - 1.2 如何获得美观的测试报告
  • Prompt逆向工程:如何“骗“大模型吐露其Prompt?
  • 前端实现在PDF上添加标注(1)
  • 如何启动 Linux Debian/Ubuntu 等 SSH 服务器
  • TypeScript 中的 reduce计算统计之和
  • 【VASP】VASP结合Phonopy计算自由能、热容和熵
  • A002基于SpringBoot实现的幼儿园管理系统
  • SMART原则
  • 机器学习: 逻辑回归
  • HiveQL命令(三)- Hive函数
  • go语言简单快速的按顺序遍历kv结构(map)
  • Kotlin Lambda
  • Mybatis快速入门与核心知识总结
  • 【如何掌握CSP-J 信奥赛中的分治算法】
  • 鸿蒙开发-显示提示框用法
  • 如何实现华为云+deepseek?
  • pytorch 模型的参数查看函数介绍
  • 管式超滤膜分离技术都可以应用到哪些行业?
  • 新一代SCADA: 宏集Panorama Suite 2025 正式发布,提供更灵活、符合人体工学且安全的应用体验
  • Springboot Bean创建流程、三种Bean注入方式(构造器注入、字段注入、setter注入)、循坏依赖问题
  • flutter isolate到底是啥
  • Python练习(5)