HTTP请求的幂等:
Http请求的 GET , HEAD , PUT 和 DELETE 等方法都是幂等的,而 POST 方法不是。
幂等问题产生原因:

实现幂等的方案:
Spring Boot 实现接口幂等性的 4 种方案!还有谁不会?-CSDN博客
1.数据库唯一主键
2.数据库乐观锁:

3.防重Token:

4.分布式锁保证接口幂等:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| RLock lock = redissonClient.getLock(LOCK_USER_REGISTER_KEY + requestParam.getUsername()); try {
if (lock.tryLock()) { try { int inserted = baseMapper.insert(BeanUtil.toBean(requestParam, UserDO.class)); if (inserted < 1) { throw new ClientException(USER_SAVE_ERROR); } } catch (DuplicateKeyException ex) { throw new ClientException(USER_EXIST); } userRegisterCachePenetrationBloomFilter.add(requestParam.getUsername()); groupService.saveGroup(requestParam.getUsername(), "默认分组"); return; } throw new ClientException(USER_NAME_EXIST); } finally { lock.unlock(); } }
|
5.状态机实现幂等: