关于幂等性以及怎么实现幂等性
概念
我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。
例如:前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。等等很多重要的情况,这些逻辑都需要幂等的特性来支持。
实现方案
- 数据库唯一索引,防止新增脏数据。
- token机制,防止重复提交。
数据提交前要向服务的申请token,token放到redis,token有效时间 提交后后台校验token,同时删除token,生成新的token返回。 - 数据库悲观锁。
select * from account where name=”xxx” for update
- 数据库乐观锁。
update account set price=100,version=2 where version=1
- 分布式锁
zookeeper或者redis都可实现。 - 对外第三方api。一般要求提供唯一字段组成唯一索引。
https://juejin.im/entry/57fec6850e3dd90057e1e47e