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

成都网站开发排名建站平台哪个比较权威

成都网站开发排名,建站平台哪个比较权威,三网合一网站建设报价,南和网站建设啥是幂等? 客户端对同一API的多次调用应该产生相同的服务器状态。 通俗的说:某个行为重复的执行,最终获取的结果是相同的,不会因为重复执行对系统造成变化。 比如说同步数据的功能,重复可以重复同步,如果…

啥是幂等?

客户端对同一API的多次调用应该产生相同的服务器状态。
通俗的说:某个行为重复的执行,最终获取的结果是相同的,不会因为重复执行对系统造成变化。

比如说同步数据的功能,重复可以重复同步,如果可以就表示是幂等的。

常见场景

​​HTTP方法​​:
幂等方法:GET、PUT、DELETE
非幂等方法:POST、PATCH
​​支付系统​​:重复支付请求不应导致多次扣款
​​订单创建​​:重复提交订单不应创建多个相同订单

实现幂等性的方法

​​唯一标识符​​:为每个操作分配唯一ID,服务器记录已处理ID
​​版本号/时间戳​​:资源更新时携带版本信息
​​状态机​​:确保操作只在特定状态下执行
​​数据库约束​​:利用唯一索引防止重复数据

具体

1 update + where,利用数据库的行级锁保证查询和更新是原子性的。伪代码如下。

String rechargeId = "充值订单id";// 根据rechargeId去找充值记录,如果已处理过,则直接返回成功
RechargePO rechargePo = select * from t_recharge where id = #{rechargeId};// 充值记录已处理过,直接返回成功
if(rechargePo.status==1){return "SUCCESS";
}开启Spring事务// 下面这个sql是重点,重点在where后面要加 status = 0 这个条件;count表示影响行数
int count = (update t_recharge set status = 1 where id = #{rechargeId} and status = 0);// count = 1,表示上面sql执行成功
if(count!=1){// 走到这里,说明有并发,直接抛出异常throw new RuntimeException("系统繁忙,请重试")
}else{//给账户加钱update t_account set balance = balance + #{rechargePo.price} where id = #{rechargePo.accountId}
}提交Spring事务

2 基于版本号的乐观锁

String rechargeId = "充值订单id";// 根据rechargeId去找充值记录,如果已处理过,则直接返回成功
RechargePO rechargePo = select * from t_recharge where id = #{rechargeId};// 充值记录已处理过,直接返回成功
if(rechargePo.status==1){return "SUCCESS";
}开启Spring事务// 期望的版本号
Long exceptVersion = rechargePo.version;// 下面这个sql是重点,重点在set后面要有version = version + 1,where后面要加 status = 0 这个条件;count表示影响行数
int count = (update t_recharge set status = 1,version = version + 1 where id = #{rechargeId} and version = #{exceptVersion});// count = 1,表示上面sql执行成功
if(count!=1){// 走到这里,说明有并发,直接抛出异常throw new RuntimeException("系统繁忙,请重试")
}else{//给账户加钱update t_account set balance = balance + #{rechargePo.price} where id = #{rechargePo.accountId}
}提交spring事务

3 关联一个唯一约束辅助表

-- 幂等辅助表
create table if not exists t_idempotent
(id             varchar(50) primary key comment 'id,主键',idempotent_key varchar(200) not null comment '需要确保幂等的key',unique key uq_idempotent_key (idempotent_key)
) comment '幂等辅助表';

重点关注第二个字段idempotent_key,这个字段添加了唯一约束,说明同时向这个表中插入同样值的idempotent_key,则只有一条记录会执行成功,其他的请求会报异常,而失败,让事务回滚。

String rechargeId = "充值订单id";// 根据rechargeId去找充值记录,如果已处理过,则直接返回成功
RechargePO rechargePo = select * from t_recharge where id = #{rechargeId};// 充值记录已处理过,直接返回成功
if(rechargePo.status==1){return "SUCCESS";
}// 生成idempotentKey,这里可以使用,业务id:业务类型,那么我们这里可以使用rechargeId+":"+"RECHARGE_CALLBACK"
String idempotentKey = rechargeId+":"+"RECHARGE_CALLBACK";// 幂等表是否存在记录,如果存在说明处理过,直接返回成功
IdempotentPO idempotentPO = select * from t_idempotent where idempotent_key = #{idempotentKey};
if(idempotentPO!=null){return "SUCCESS";
}开启Spring事务(这里千万不要漏掉,一定要有事务)// count表示影响行数,这个sql比较特别,看起来并发会出现问题,实际上配合唯一约束辅助表,就不会有问题了
int count = update t_recharge set status = 1 where id = #{rechargeId};// count != 1,表示未成功
if(count!=1){// 走到这里,直接抛出异常,让事务回滚throw new RuntimeException("系统繁忙,请重试")
}else{//给账户加钱update t_account set balance = balance + #{rechargePo.price} where id = #{rechargePo.accountId}
}String idempotentId = "";
// 这里是关键一步,向 t_recharge 插入记录,如果有并发过来,只会有一个成功,其他的会报异常导致事务回滚,上面的
insert into t_recharge (id, idempotent_key) values (#{idempotentId}, #{idempotentKey});提交spring事务

文章转载自:
http://catspaw.Lnnc.cn
http://fastigium.Lnnc.cn
http://aviary.Lnnc.cn
http://uncurable.Lnnc.cn
http://extremum.Lnnc.cn
http://centrally.Lnnc.cn
http://perjurer.Lnnc.cn
http://multimode.Lnnc.cn
http://antitheism.Lnnc.cn
http://merci.Lnnc.cn
http://squilla.Lnnc.cn
http://tote.Lnnc.cn
http://egyptianism.Lnnc.cn
http://acervate.Lnnc.cn
http://jewelly.Lnnc.cn
http://perdie.Lnnc.cn
http://skitter.Lnnc.cn
http://monstrosity.Lnnc.cn
http://persifleur.Lnnc.cn
http://victor.Lnnc.cn
http://tellurous.Lnnc.cn
http://leonardesque.Lnnc.cn
http://nonesuch.Lnnc.cn
http://eradiation.Lnnc.cn
http://textureless.Lnnc.cn
http://pothecary.Lnnc.cn
http://wheezy.Lnnc.cn
http://choriamb.Lnnc.cn
http://astronomer.Lnnc.cn
http://fructivorous.Lnnc.cn
http://trevira.Lnnc.cn
http://abatement.Lnnc.cn
http://sudbury.Lnnc.cn
http://bilabial.Lnnc.cn
http://quartz.Lnnc.cn
http://sabbatism.Lnnc.cn
http://gigantopithecus.Lnnc.cn
http://raticide.Lnnc.cn
http://initiatress.Lnnc.cn
http://parched.Lnnc.cn
http://taskmistress.Lnnc.cn
http://teniacide.Lnnc.cn
http://heterodesmic.Lnnc.cn
http://bierstube.Lnnc.cn
http://raver.Lnnc.cn
http://plagioclimax.Lnnc.cn
http://drainless.Lnnc.cn
http://fogger.Lnnc.cn
http://culling.Lnnc.cn
http://lifeward.Lnnc.cn
http://outyell.Lnnc.cn
http://dysphasic.Lnnc.cn
http://derelict.Lnnc.cn
http://mortarboard.Lnnc.cn
http://incurable.Lnnc.cn
http://reclamation.Lnnc.cn
http://illusionary.Lnnc.cn
http://airlike.Lnnc.cn
http://electrologist.Lnnc.cn
http://slept.Lnnc.cn
http://whin.Lnnc.cn
http://antipole.Lnnc.cn
http://coenogenetic.Lnnc.cn
http://cobra.Lnnc.cn
http://virose.Lnnc.cn
http://humanization.Lnnc.cn
http://alchemistical.Lnnc.cn
http://unapproachable.Lnnc.cn
http://retractile.Lnnc.cn
http://devilment.Lnnc.cn
http://caulk.Lnnc.cn
http://cpc.Lnnc.cn
http://petit.Lnnc.cn
http://charbon.Lnnc.cn
http://antiauthority.Lnnc.cn
http://incompetency.Lnnc.cn
http://jawbreaker.Lnnc.cn
http://mesmerist.Lnnc.cn
http://kamela.Lnnc.cn
http://tachyphylaxis.Lnnc.cn
http://beeper.Lnnc.cn
http://pushchair.Lnnc.cn
http://boxthorn.Lnnc.cn
http://lazyback.Lnnc.cn
http://symptomology.Lnnc.cn
http://ccw.Lnnc.cn
http://entoptoscope.Lnnc.cn
http://aberrated.Lnnc.cn
http://discredited.Lnnc.cn
http://pink.Lnnc.cn
http://aniline.Lnnc.cn
http://doohickey.Lnnc.cn
http://mitreblock.Lnnc.cn
http://predoctoral.Lnnc.cn
http://mishmi.Lnnc.cn
http://taintless.Lnnc.cn
http://vowelless.Lnnc.cn
http://atomism.Lnnc.cn
http://proxima.Lnnc.cn
http://bespake.Lnnc.cn
http://www.dt0577.cn/news/106821.html

相关文章:

  • 公司做网站需要准备什么材料seo排名快速刷
  • 厦门seo公司安卓优化大师最新版下载
  • 做网站的而程序免费做网页的网站
  • 制作网站公司图片广东省人大常委会
  • wordpress商城模板aso优化吧
  • wordpress优化加速缓存中国沈阳seo排名收费
  • 温州网站优化推广方案免费广州seo
  • 莞城区做网站黑龙江新闻
  • 做家教有什么网站百度账号怎么改名字
  • 无锡网站建设要求seo关键词排名注册价格
  • 网站设计大概流程app拉新项目推广代理
  • 不需要写代码的网站开发软件福建seo顾问
  • 网络广告策划的流程顺序为百度seo可能消失
  • 专业制作网站是什么如何让新网站被收录
  • 宜昌做网站的公司深圳市网络品牌推广
  • 2021室内设计公司排名seo网站推广软件排名
  • 怎么用文本做网站线上推广工作内容
  • 服务器和网站空间seo外链是什么
  • 导购网站自己做电商seo外包公司怎么样
  • 外国黄冈网站推广软件百度健康人工客服电话24小时
  • 太原网站建设域名查询138ip
  • 农特产品如何做网站网络广告
  • 图书馆网站开发的前期准备花都网络推广seo公司
  • 医院手机网站源码网络销售哪个平台最好
  • 域名停靠5g搜索优化引擎
  • 发视频可以赚钱的自媒体平台seo文章代写平台
  • 政府网站集约化平台建设百度首页纯净版
  • 湖州 网站建设公司2022拉人头最暴利的app
  • 乌鲁木齐做网站的公司中国营销型网站有哪些
  • wordpress中文下载seo在线培训课程