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

Java 的锁机制,是不是只能在确认只会部署一台机器的前提下使用?

  •  1
     
  •   shadowfish0 · 52 天前 · 628 次点击
    这是一个创建于 52 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一个需求,需要在数据库插入数据,但是要求不能和之前的记录重复,因为这个重复判定还需要计算时间,不能直接做成唯一索引,因此就需要用锁机制来搞定,这里就有个疑惑了

    如果用 mysql 的锁机制,把 select 和 insert 放在一个事务里,那应该必须只能串行化处理,整个表都被锁了

    如果用 java 的 synchronized()机制,应该可以做到在进行这个处理的过程中不会锁整张表。但是就有个问题,如果要做多机部署搞负载均衡,那 java 层面的锁不就没用了白做了吗

    然后就引申出,java 的锁机制,是不是只能在确认只会部署一台机器的前提下使用?

    8 条回复    2021-09-02 14:12:22 +08:00
    dilu
        1
    dilu   52 天前
    单个机器,直接本地锁,例如互斥锁 即可

    多个机器,要用分布式锁,例如 redis
    dqzcwxb
        2
    dqzcwxb   52 天前
    SuperManNoPain
        3
    SuperManNoPain   52 天前
    cheng6563
        4
    cheng6563   52 天前

    分布式锁的话,不想加 redis 之类的组件可以直接在数据库建个表利用事务来做。
    keepeye
        5
    keepeye   52 天前
    mysql 事物用 select ... for update 语句,条件合适的话应该是行锁吧

    脱离 mysql 的话,只能考虑分布式锁啦
    Senorsen
        6
    Senorsen   52 天前
    Java 的锁机制主要是为了本地多线程资源共享问题。
    你这需求就得用分布式锁
    xilou31
        7
    xilou31   51 天前
    你想要用多机器就需要用分布式锁
    sakasaka
        8
    sakasaka   49 天前
    synchronized 是基于 JVM 虚拟机的
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1376 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:52 · PVG 01:52 · LAX 10:52 · JFK 13:52
    ♥ Do have faith in what you're doing.