V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
weishao666
V2EX  ›  问与答

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

  •  
  •   weishao666 · 2022-11-30 11:38:20 +08:00 · 725 次点击
    这是一个创建于 726 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    5 条回复    2022-11-30 11:56:08 +08:00
    7911364440
        1
    7911364440  
       2022-11-30 11:44:09 +08:00
    分布式锁
    xiangyuecn
        2
    xiangyuecn  
       2022-11-30 11:49:12 +08:00
    跟分布式不分布式没关系。

    你就算是一个节点也会出这个问题。
    xiangyuecn
        3
    xiangyuecn  
       2022-11-30 11:50:39 +08:00
    你根本就没加锁。开的事务成了摆设。
    yianing
        4
    yianing  
       2022-11-30 11:52:00 +08:00 via Android
    数据库 rr + select for update
    oneisall8955
        5
    oneisall8955  
       2022-11-30 11:56:08 +08:00 via Android
    try lock
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3697 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:23 · PVG 12:23 · LAX 20:23 · JFK 23:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.