汽车网站建设可行性分析,开发外包公司,学校网站建设机构,网站建设 网站优质文章#xff0c;及时送达作者 | wangzaiplus链接 | www.jianshu.com/p/6189275403ed一、概念幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次比如:订单接口, 不能多次创建订单支付接口, 重复支付同一笔订单只能扣一次钱支付宝回调接口, 可能…优质文章及时送达作者 | wangzaiplus链接 | www.jianshu.com/p/6189275403ed一、概念幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次比如:订单接口, 不能多次创建订单支付接口, 重复支付同一笔订单只能扣一次钱支付宝回调接口, 可能会多次回调, 必须处理重复回调普通表单提交接口, 因为网络超时等原因多次点击提交, 只能成功一次等等二、常见解决方案唯一索引 -- 防止新增脏数据token机制 -- 防止页面重复提交悲观锁 -- 获取数据的时候加锁(锁表或锁行)乐观锁 -- 基于版本号version实现, 在更新数据那一刻校验数据分布式锁 -- redis(jedis、redisson)或zookeeper实现状态机 -- 状态变更, 更新数据时判断状态三、本文实现本文采用第2种方式实现, 即通过redis token机制实现接口幂等性校验四、实现思路为需要保证幂等性的每一次请求创建一个唯一标识token, 先获取token, 并将此token存入redis, 请求接口时, 将此token放到header或者作为请求参数请求接口, 后端接口判断redis中是否存在此token:如果存在, 正常处理业务逻辑, 并从redis中删除此token, 那么, 如果是重复请求, 由于token已被删除, 则不能通过校验, 返回请勿重复操作提示如果不存在, 说明参数不合法或者是重复请求, 返回提示即可五、项目简介springbootredisApiIdempotent注解 拦截器对请求进行拦截ControllerAdvice全局异常处理压测工具: jmeter说明:本文重点介绍幂等性核心实现, 关于springboot如何集成redis、ServerResponse、ResponseCode等细枝末节不在本文讨论范围之内, 有兴趣的小伙伴可以查看我的Github项目:https://github.com/wangzaiplus/springboot/tree/wxw六、代码实现pomredis.clientsjedis2.9.0org.projectlomboklombok1.16.10JedisUtilComponentSlf4jpublic classJedisUtil{Autowiredprivate JedisPool jedisPool;private Jedis getJedis {return jedisPool.getResource;}/*** 设值** param key* param value* return*/public String set(String key, String value) {Jedis jedis ;try {jedis getJedis;return jedis.set(key, value);} catch (Exception e) {log.error(set key:{} value:{} error