两次请求导致两次插入

时间:2020-10-15 17:57:04

标签: php symfony axios single-page-application

我们有一个流量很大的SPA应用程序,有时在应用程序的多个部分中插入双行。

例如用户注册。通常情况下,验证机制将进行技巧检查,如果电子邮件地址已经存在,但是我能够通过使用axios分派两次相同的请求来重现该问题,从而导致数据库中的用户翻倍。

我最初以为第二个请求应该引发验证错误,但是显然它太快了,在第一个请求能够存储它之前先检查用户。

所以我在这些请求之间放置了500ms的延迟,是的,它起作用了,第二个请求抛出了验证错误。

我的问题是,如果已经在第二个相同的分数中分派了两个请求,那么防止双重插入的技术是什么?

当然,在发出第一个请求后,我们已经阻止了“提交表单”按钮(从开始开始),但是人们还是设法设法两次调度了请求。

1 个答案:

答案 0 :(得分:2)

我过去使用的一个选项是数据库锁定。我对此有些生疏,但就您而言:

  1. 请求对该表进行写锁定
  2. 在表上运行SELECT以查找用户。
  3. 在表上运行INSERT。
  4. 释放写锁定。

post on DB locking应该使您更好地了解哪些锁应用了什么影响。注意:某些数据库系统实现锁的方式可能不同。

编辑:我还应该注意,使用数据库锁还会有其他性能问题。

相关问题