teemoer
V2EX  ›  Java

Java 高并发下 数据脏读脏写的问题如何解决?

  •  
  •   teemoer · Jun 1, 2019 · 4504 views
    This topic created in 2606 days ago, the information mentioned may be changed or developed.

    诸位工作中有没有遇到 这种情况 比如用户的充值卡消费问题 或者是 数量为 100 个的某商品的秒杀活动 数据量小的时候 是正常的 但是比如 用户每隔 一段很小的时间 就消费一次 会导致 金额不正常 比如用户 每隔 0.001 秒就消费 1 元钱 原本 有 50 元 消费了三次 结果就应该为 47 但是 如果时间很短 量很大 可能最终用户的金额为 49 或者 48 都有可能

    也就是高并发问题下面的 数据脏读脏写问题
    我以前处理脏读脏写问题 用了自己写的 redis 锁 但是 会消耗 用户的等待时间 也就是说是牺牲时间来换稳定 如果同一处代码 有很多人在同时调用 会导致 用户一直在网页等待(当然这里可以通过用户 ID 或者秒杀的商品 ID 来做 redis 锁 拿到锁才能执行 执行完毕 释放锁 可以减少部分等待时间 ) 你们公司有这种情况吗 是怎么解决的?

    是否拥有更好的解决方案,大概方案是怎么处理的,难道只能牺牲时间来处理吗?

    如果使用内存数据库操作,如何保证内存数据库和物理数据库之间的正常同步。

    java 工作了 快四年了 发现自己还是无法正确的处理高并发下面发生的各种莫名其妙的情况。

    望大佬指教,感激不尽。

    4 replies    2019-06-03 18:30:05 +08:00
    polymerdg
        1
    polymerdg  
       Jun 1, 2019
    用計數器不行麼?
    tms
        2
    tms  
       Jun 1, 2019 via Android
    上队列然后路由同一个用户的消息给同一个消费者处理
    anyele
        3
    anyele  
       Jun 3, 2019 via Android
    用队列
    gaobing
        4
    gaobing  
       Jun 3, 2019
    消息队列,削峰
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3132 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 12:38 · PVG 20:38 · LAX 05:38 · JFK 08:38
    ♥ Do have faith in what you're doing.