高并发情况下如何保证幂等性?

幂等性这个概念已经说烂了,就是不管你多少次执行多少次,产生的效果和返回的结果都是一样的。

1,select操作

在数据不变的情况下,select操作多次查询到的结果都是幂等的。

2.删除操作

删除语句内容不变的情况下,删除多次的结果也是一样的。但是得到返回值不是一样的。

3.唯一索引。

为了新增读脏数据。比如支付宝的资金账户,支付宝允许一个用户有一个支付宝账户,就是给资金账户表中的用户ID加的唯一索引,所以一个用户新增成功一个资金账户记录。当表中存在唯一索引的时候,并发新增会报错,再重新查询一次就可以了。

4.token机制。

防止页面重复提交。

业务要求:页面的数据只能被点击提交一次;

发生的原因:由于重复点击或者网络重发,或者nginx重发等情况会导致数据被重复提交;

解决方法:集群建立实用token加上redis(redis是单线程的,处理需要排队);单JVM环境:采用token加redis或者token加上JVM内存。

处理流程:1,数据提交前需要向服务申请token,token梵高redis或jvm内存中,token有效时间。

2,提交后后台检验token,同时删除token生成新token。

token特性:要申请,一次有效性,可以限流。

5.锁

可以使用乐观悲观和分布式锁实现。

原文地址:https://www.cnblogs.com/ffdsj/p/12387646.html