概念
我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。
例如:前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。等等很多重要的情况,这些逻辑都需要幂等的特性来支持。
实现方案
- 数据库唯一索引,防止新增脏数据。
- token机制,防止重复提交。
token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。
当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。
简单token的组成;uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止token泄露)。
- 分布式锁
zookeeper或者redis都可实现。 - 对外第三方api。一般要求提供唯一字段组成唯一索引。
-
数据库乐观锁。
update account set price=100,version=2 where version=1