gpt4 book ai didi

java - 如何从前端避免并发

转载 作者:行者123 更新时间:2023-11-29 05:15:48 25 4
gpt4 key购买 nike

我们有一个要求,经理登录到站点并以表格格式查看用户记录列表。当他点击某个记录时,他会获得用户的详细信息并调用用户解决他的问题。现在有可能两个经理登录并单击同一条记录并同时调用同一用户。我们想避免这种情况。

条件 1:两个管理员同时登录的记录都可用,正常颜色为绿色。经理 1 单击记录并开始编辑/调用用户。在这种情况下,应该有某种锁,这样如果经理 2 试图打开同一条记录,他将收到弹出消息“进行中”。

条件2:经理1登录,看到绿色的记录。然后经理 2 登录并看到相同的灰色记录。现在他应该不能点击那条记录了。


Manager1:从记录中选择状态,ver_no,其中 record_id=? (ver_no 现在为零)单击记录以查看详细信息和更新记录集 status='In progress', ver_no=1 where record_id=?和 ver_no=0(ver_no 现在是 1 - 成功)

现在管理员二登录一段时间后管理员1还没有关闭记录说明状态还在进行中或者他直接关闭了浏览器Manager2:从记录中选择状态,ver_no,其中 record_id=? (ver_no 现在是 1)单击记录以查看详细信息和Manager2:更新记录集 status='In progress', ver_no=1 where record_id=?和 ver_no=1(ver_no 现在是 1 - 成功)

最佳答案

这是乐观锁定方案的一个很好的案例。这仅适用于后端服务器代码。您不能在前端使用 java 脚本锁定用户。

让我用简单的术语解释一下如何做到这一点:

向数据库表添加版本号列和状态标志。可能在记录表上。

经理 1 单击记录,首先从数据库中选择记录,递增版本号并更新表明记录现在已被拾取的标志。

经理 2 单击记录(如果他同时单击,则经理 2 将选择与经理 1 选择的相同记录)。但是,当管理器 2 尝试更新记录时,版本号将不匹配,更新将返回,但没有更新任何行。使用它来更新您的 UI,说明记录正在进行中。

对话将如下所示:

Manager1: select status, ver_no from record where record_id=? (ver_no is now zero)
Manager2: select status, ver_no from record where record_id=? (ver_no is now zero)

Manager1: update record set status='In progress', ver_no=1 where record_id=? and ver_no=0 (ver_no is now 1 - Success)
Manager2: update record set status='In progress', ver_no=1 where record_id=? and ver_no=0 (This will fail to update any row)

以上只是为了防止它们同时攻击同一行。大多数情况下,当 Manager 2 选择自己时,状态已经是 In progress。如果没有,您可以使用该记录。

关于java - 如何从前端避免并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26601372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com