Java Spring应用中解决竞赛条件的最佳方法是什么?

问题描述 投票:0回答:2

我在Spring上开发了一个简单的问答网络应用,实现了 "问答按钮",在客户端玩家应该比其他玩家更快地点击按钮来获得分数。所以我有这样的控制器方法

@RequestMapping(value = "/pressButton", method = RequestMethod.POST)
public String processButtonClick(Authentication authentication) {
    //return first player name
}

如何检查哪个用户先点击的?如何防止db更新时出现竞赛状态?

java spring postgresql race-condition
2个回答
0
投票

你可以将你的方法分配给 synchronized我建议在你的DB中为userId和questionId组合添加唯一的约束。


0
投票

我建议在你的DB中为userId和questionId的组合添加唯一的约束。同步只有在只有一个服务实例的情况下才会有效,而在高扩展性的环境中,这种情况很少。Redis锁是另一个可行的选择。

© www.soinside.com 2019 - 2024. All rights reserved.