幂等性这个概念已经说烂了,就是不管你多少次执行多少次,产生的效果和返回的结果都是一样的。
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.锁
可以使用乐观悲观和分布式锁实现。