常见方案
前端js添加禁用 (如果客户端禁止使用js, 此方法无效)
唯一索引 – 防止新增脏数据
使用AOP自定义切入实现
token机制 – 防止页面重复提交
(恶意用户可利用这一性质,不断重复访问页面,以致Session中保存的标识号不断增多,最终严重消耗服务器内存。可以采用在Session中记录用户发帖的时间,然后通过一个时间间隔来限制用户连续发帖的数量来解决这一问题。)
悲观锁 – 获取数据的时候加锁(锁表或锁行)
乐观锁 – 基于版本号version实现, 在更新数据那一刻校验数据
分布式锁 – redis(jedis、redisson)或zookeeper实现
状态机 – 状态变更, 更新数据时判断状态
insert操作的幂等性
有唯一业务号的insert操作 :例如秒杀 商品id+用户id
通过分布式锁 保证接口幂等性
业务执行完成后,不进行锁释放 让其自动过期
没有唯一业务好的insert操作 例如 用户注册 点击多次
使用token机制 保证幂等性
进入到注册页时,后台统一生成token 返回前台隐藏域中
用户在页面点击提交时,讲token一同传入后台
使用token获取分布式锁 ,完成insert操作
执行成功后,不进行锁释放 让其自动过期
参考
防止表单重复提交(只通过后台实现)_MrBlackWhite的博客-CSDN博客_防止表单重复提交
实现幂等性的几种方式
幂等性的实现方案
高并发下接口幂等性解决方案 - Ruthless - 博客园