前几天遇到一个问题,因为公司数据库响应比较慢,所以导致我有时候会重复的提交sql打到db上,这些校验在后端中都被通过了,
因为sql还没有反应过来,这种问题其实也是在高并发的场景下常见的,第一次遇到这种情况,当时的我没想那么多,暂时没去解决,今天仔细一想才明白问题所在,如何避免这种问题?
1、加锁,一次只允许一条线程进行执行,直到sql执行完成并返回
最安全,无论是我说的场景还是并发都安全
2、二次校验,在sql执行完之后再次进行db校验,失败则直接抛出异常并事务回滚,致使只有一条sql可以执行成功
每次执行都要多查询一次db
3、重复提交校验,对于同一个接口同样的参数的提交进行拦截,例如 约定在10秒内不能重复提交
大概率可以避免我所遇到的问题
我最终选择了方案3