前言
首先来说下幂等性这个概念吧,接口幂等性就是同一个接口多次调用的结果是一样的。
场景:
1、form表单操作,因为网络原因或者客户手快的原因连续点了好几次,数据库多了几条不该有的数据,或者某个字段的值修改结果跟逾期不符合。
2、第三方接口回调 就拿支付回调来说,通常我们会在回调中更新下订单,还有添加一些支付信息等。多次调用会出现重复记录,或者订单某个字段的更新错误。
上面的操作 总结下就是两种
1、添加insert操作,会导致重复记录
2、更新update操作,会导致数据更新错误
解决办法:
1、insert操作如果提交的的字段里有唯一字段,那么加上唯一索引,
2、操作之前先去查一下这个表,update的话就根据id查这个表的状态有没有更新过,insert的话根据唯一性字段查询数据库有没有此记录,如果有则不走insert和update直接返回成功,
3、如果当前表除了主键没有唯一字段,并且是高并发的情况那么我们可以加锁 乐观锁或者悲观锁(推荐乐观锁)
4,如果不光有高并发,而且是分布式的话可以用分布式锁 如redis分布式锁、zookeeper锁等
本文只是简单总结,勿喷,如有不对的地方写出你的想法
Cloudflare 有一项功能挺不错的,就是将页面上所有的邮箱地址都加密起来,防止机...
MySQL主从复制和读写分离 MySQL在企业中的拓扑图 MySQL主从复制 MySQL主从复制的...
经过大鸟哥的指导已做全面的修改,本人能力有限只能做到下面这步了: ASP/Visual...
需求:求每个城市中成绩最高的两个人的信息 数据: csv格式 id , name , age , sex...
通常操作系统和软件开发包中都包含 文本编辑器 ,可以用来编辑配置文件,文档文...
大家好我是冰河~~ 最近有很多小伙伴让我更新一些Zookeeper的文章正好也趁着清明...
近日,Firefox 开发者 Martin Stransky 介绍了 Firefox 84 最新搭载的 WebRender...
本文实例讲述了Java Servlet生成JSON格式数据并用jQuery显示的方法。分享给大家...
项目需求是跟用户当前位置判断是否在给定的地理位置范围内,符合位置限制才可以...
vscode怎么浏览器打开html文件?可以通过安装open in browser插件解决。 1、安装...