实际问题的产生:
1、多次按钮点击(点了多次支付,扣了多次款)
2、回退页再提交
3、微服务互相调用,网络问题导致失败,feign触发重试机制
有些业务不需要考虑,部分业务天然幂等
解决:
1、token机制
Token可以是验证码、可以是服务器生˜成的随机串
要保证获取、设置、删除的原子性。(使用redis脚本,而不是java方法)
2、各种锁机制
悲观锁、乐观锁、分布式锁
3、唯一约束
数据库唯一约束、唯一索引
Redis set防重 判断是否存在对应的Md5值
4、防重表
5、全局请求唯一id