比如我们遇到了一个提交订单的例子
- 假设模拟网速很慢,它点击了多次提交订单,我们数据库的订单被插入了多份,订单的防止重复提交是非常重要的(无论是表单之间的提交,还是微服务之间的相互调用,都可能出现多次提交)专业术语就是要保证提交订单的幂等性(提交一次和提交一百次结果都是一样的),接下来我们就来讨论一下接口幂等性问题
1:什么是幂等性?
2: 哪些情况需要防止?
3: 什么情况下需要幂等?
4:幂等解决方案
- token机制
我们来到一个页面给页面放上一个令牌(假设这个令牌就是123456),我们点击提交订单就是会带上这一个令牌,服务器提前存储了这个令牌就是123456,页面提交来的令牌和服务器的一模一样,就算是验证通过了;只要我们的验证通过,服务器就会把这个令牌删除;如果下一次还要在进行重复提交,我们的服务器已经把原来的令牌(123456)给删除了,所以验证就会不通过;就可以保证幂等性
- 注意:从上面的危险性可知:我们一定要保证从redis获取的令牌,和前端发送到服务端的令牌进行对比,还有删除令牌,这三个操作一定是原子性的
- 各种锁机制
3. 各种唯一约束
4. 防重表
5. 全局请求的唯一id