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

ops/2025/2/13 18:51:03/

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

解决方案:

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.ppmy.cn/ops/158104.html

相关文章

【分布式理论7】分布式调用之:服务间的(RPC)远程调用

文章目录 一、RPC 调用过程二、RPC 动态代理:屏蔽远程通讯细节1. 动态代理示例2. 如何将动态代理应用于 RPC 三、RPC序列化与协议编码1. RPC 序列化2. RPC 协议编码2.1. 协议编码的作用2.2. RPC 协议消息组成 四、RPC 网络传输1. 网络传输流程2. 关键优化点 一、RPC…

计算机毕业设计SpringBoot校园二手交易小程序 校园二手交易平台(websocket消息推送+云存储+双端+数据统计)(源码+文档+运行视频+讲解视频)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

Ubuntu18 将脚本设置成自启动的几种方法

Ubuntu18 将脚本设置成自启动 在Ubuntu 18.04中,有多种方法可以将脚本设置为自启动。以下是几种常见的方法: 方法1:使用crontab 打开终端。 输入 crontab -e 命令编辑当前用户的crontab文件。 在文件末尾添加以下行来设置脚本在启动时运行…

如何修改IDEA的maven远程仓库地址

IDEA自动的maven的远程仓库地址为国外地址&#xff0c;导致下载依赖时很慢&#xff0c;通过如下方法可以将其修改为国内地址 选中模块&#xff0c;右击&#xff0c;创建setting.xml文件 添加阿里仓库地址 <mirrors><mirror><id>nexus-aliyun</id><…

AI基础 -- AI学习路径图

人工智能从数学到大语言模型构建教程 第一部分&#xff1a;AI 基础与数学准备 1. 绪论&#xff1a;人工智能的过去、现在与未来 人工智能的定义与发展简史从符号主义到统计学习、再到深度学习与大模型的变迁本书内容概览与学习路径指引 2. 线性代数与矩阵运算 向量与矩阵的…

Ansible中playbook的变量

变量 playbook的变量有以下几种 在playbook中用户自定义的变量远程主机中由Ansible收集的变量在文件模板中使用的上述两种变量把任务结果作为一个变量使用&#xff0c;叫注册变量用户在执行playbook时&#xff0c;通过命令行传入的变量&#xff0c;叫做额外变量 在playbook中…

ANI-AGI-ASI

AI全面进入时代的时间取决于多个因素&#xff0c;包括技术突破、政策监管、市场应用和社会接受度等。目前&#xff0c;AI正处于指数级发展的阶段&#xff0c;预计 5-10 年 内可以实现广泛应用&#xff0c;但 全面进入 AI 时代&#xff08;即 AI 深度融入所有行业并重塑社会经济…

机器学习算法的种类(机器学习类型的比较)

理解不同的机器学习算法具有重要意义。了解各算法的原理、优缺点和适用场景&#xff0c;有助于根据具体问题选择最合适的算法&#xff0c;从而提高模型的性能和准确性。深入理解算法的工作机制&#xff0c;可以更有效地进行模型调优&#xff0c;包括参数调整和特征选择&#xf…