我有一个 aspnet6.0 应用程序,当并发请求在毫秒内发出时,它会创建重复记录。逻辑很简单。需要创建一个组,但它的名称是从数据库中验证的,以查看它是否已存在。如果它确实存在,则返回它,否则创建并返回新组。正在使用 MySQL,名称列也已建立索引。我正在考虑添加 Task.Delay 但这听起来不太有希望。我正在寻找一个高性能且高效的解决方案。也尝试过缓存,但问题仍然存在。
请求时间表:
对组名称定义唯一约束。
然后如果插入尝试保存存在的组名,则会抛出重复键异常。
如果您首先按名称检查该组是否存在,这种情况应该很少见。换句话说,只有当您检查组时没有找到任何组名,但在检查后,其他某个会话插入了该组名时,您才会得到重复项。
通过从数据库中重新读取该组来处理异常,因为它现在已经存在。