因此,让我们假设有一个名为"Products"的实体,并且您有包括POST在内的REST API来创建产品。产品有一个自动生成的"ID"字段和唯一的"名称"字段。你在方法内部做的是:
- 验证是否没有其他具有相同名称的产品。因此,您从DB中选择产品,并将Name与输入参数进行比较
- 如果已经创建了相同的产品,则返回400
- 如果没有具有指定名称的产品,则创建实体并将其保存到DB
问题是,如果同时有两个POST请求,您将得到一个错误。我们应该在这里使用一些锁定机制吗?如何正确操作?
实际上不需要使用任何类型的锁定,在名称字段上使用唯一的约束,这将使您无法存储两个具有相同名称的产品。然后捕获抛出的异常并将其返回为400。
保持方法逻辑的其余部分不变,我猜这是一个非常边缘的情况,两个请求同时发生的可能性非常小。99.999%的时间,您的验证会发现这一点。