自定义字段并发问题

有时我们会遇到自定义字段的并发问题。

例如,一个 webhook 处理程序会执行以下操作:

user_id = params[:externalUserId].split('-')[1]
user = User.find_by(id: user_id)
raise Discourse::NotFound unless user

... 进行大量处理 ...

user.custom_fields[:myfield] = params[:whatever]
user.save_custom_fields

当两个 webhook 针对同一用户快速连续触发时,有时我们会得到一个重复的行。下次访问用户自定义字段时,它们看起来像:
{"myfield"=>["value", "value"]}

我看到 (user_id, name)user_custom_fields 上被定义为一个索引,但不是唯一的。

有什么最佳模式可以防止这种情况发生?

4 个赞