weishao666
V2EX  ›  问与答

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

  •  
  •   weishao666 · Nov 30, 2022 · 1073 views
    This topic created in 1263 days ago, the information mentioned may be changed or developed.

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

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

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

    5 replies    2022-11-30 11:56:08 +08:00
    7911364440
        1
    7911364440  
       Nov 30, 2022
    分布式锁
    xiangyuecn
        2
    xiangyuecn  
       Nov 30, 2022
    跟分布式不分布式没关系。

    你就算是一个节点也会出这个问题。
    xiangyuecn
        3
    xiangyuecn  
       Nov 30, 2022
    你根本就没加锁。开的事务成了摆设。
    rammiah
        4
    rammiah  
       Nov 30, 2022 via Android
    数据库 rr + select for update
    itechify
        5
    itechify  
    PRO
       Nov 30, 2022 via Android
    try lock
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3892 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 00:09 · PVG 08:09 · LAX 17:09 · JFK 20:09
    ♥ Do have faith in what you're doing.