- 查询接口幂等性,已天然支持
- 删除接口幂等性,已天然支持
- 修改接口(修改某个值、累加某个数字)
- 插入接口幂等性
解决办法
- 前端页面或者app控制短时间重复提交的问题
- 服务端解决方案
-
insert使用唯一索引 update使用 乐观锁 version版本法
这种在大数据量和高并发下效率依赖数据库硬件能力,可针对非核心业务
-
使用select … for update ,这种和 synchronized 锁住先查再insert or update一样,但要避免死锁,效率也较差
针对单体 请求并发不大 可以推荐使用
- 借助分布式redis锁 boolean success = stringRedisTemplate.opsForValue().setIfAbsent(lockKey, (System.currentTimeMillis() + milliseconds) + DELIMITER + uuid); 将失效时间放入值中,这样可以防止死锁现象