我们有一个流量很大的SPA应用程序,有时在应用程序的多个部分中插入双行。
例如用户注册。通常情况下,验证机制将进行技巧检查,如果电子邮件地址已经存在,但是我能够通过使用axios分派两次相同的请求来重现该问题,从而导致数据库中的用户翻倍。
我最初以为第二个请求应该引发验证错误,但是显然它太快了,在第一个请求能够存储它之前先检查用户。
所以我在这些请求之间放置了500ms的延迟,是的,它起作用了,第二个请求抛出了验证错误。
我的问题是,如果已经在第二个相同的分数中分派了两个请求,那么防止双重插入的技术是什么?
当然,在发出第一个请求后,我们已经阻止了“提交表单”按钮(从开始开始),但是人们还是设法设法两次调度了请求。
答案 0 :(得分:2)
我过去使用的一个选项是数据库锁定。我对此有些生疏,但就您而言:
此post on DB locking应该使您更好地了解哪些锁应用了什么影响。注意:某些数据库系统实现锁的方式可能不同。
编辑:我还应该注意,使用数据库锁还会有其他性能问题。