Java 服务 4 个节点,用 mysql 表作为共享记录,做事务

2022-11-30 11:38:20 +08:00
 weishao666

每个用户过来之后为他创建一个容器,每个节点创建完容器之后,会在数据库写一条在线记录。当当前用户疯狂在请求时,可能有多个节点收到了创建请求

创建的逻辑是: 先从数据库查询是否有在线记录,有,则忽略,没有则创建并写记录

那么遇到的问题是,A 机器检查到没有记录,然后就插入,在这个过程中可能 B 也检测到没有记录,先创建并且插入了记录,A 插入就会报错,这种问题应该有通用的解法?

643 次点击
所在节点    问与答
5 条回复
7911364440
2022-11-30 11:44:09 +08:00
分布式锁
xiangyuecn
2022-11-30 11:49:12 +08:00
跟分布式不分布式没关系。

你就算是一个节点也会出这个问题。
xiangyuecn
2022-11-30 11:50:39 +08:00
你根本就没加锁。开的事务成了摆设。
yianing
2022-11-30 11:52:00 +08:00
数据库 rr + select for update
oneisall8955
2022-11-30 11:56:08 +08:00
try lock

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/899027

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX