V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kikione
V2EX  ›  程序员

支付做计费,如何加锁?

  •  
  •   kikione · 2020-10-21 17:54:37 +08:00 · 1434 次点击
    这是一个创建于 1494 天前的主题,其中的信息可能已经有所发展或是发生改变。

    业务是这样的,有很多不同的商户,每个商户假设有一个计费点,商户使用某个服务要扣一次钱,商户会并发的调这个服务的接口。商户的 id 是唯一的。

    1,项目是集群的,我加了分布式锁。 2,数据库是乐观锁。 3,在 java 的 controller 方法的代码块里加锁, 可以用商户的 id 来作为监视器吗? 商户的 id, 接口的参数会传给服务器。

    我的问题是第三个? java 线程的锁,在这个 业务上要怎么去加?

    谢谢大家

    3 条回复    2020-10-21 18:30:59 +08:00
    gfreezy
        1
    gfreezy  
       2020-10-21 18:15:46 +08:00
    你的场景一个商户单机就能搞定吗?单机才能用线程锁。
    zoharSoul
        2
    zoharSoul  
       2020-10-21 18:18:21 +08:00
    扣钱记 log,
    然后扫 log 表更新余额, 不需要锁
    gaobing
        3
    gaobing  
       2020-10-21 18:30:59 +08:00
    使用全局的 ConcurrentHashMap<Long,ReentrantLock> 为每个 id 分配一把锁,业务中先通过 id 获取锁,再加锁
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1480 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:23 · PVG 01:23 · LAX 09:23 · JFK 12:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.