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

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

  •  
  •   teemoer · 2019-06-01 15:48:43 +08:00 · 3880 次点击
    这是一个创建于 2034 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    望大佬指教,感激不尽。

    4 条回复    2019-06-03 18:30:05 +08:00
    polymerdg
        1
    polymerdg  
       2019-06-01 16:11:48 +08:00
    用計數器不行麼?
    tms
        2
    tms  
       2019-06-01 18:12:00 +08:00 via Android
    上队列然后路由同一个用户的消息给同一个消费者处理
    anyele
        3
    anyele  
       2019-06-03 01:10:24 +08:00 via Android
    用队列
    gaobing
        4
    gaobing  
       2019-06-03 18:30:05 +08:00
    消息队列,削峰
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3016 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:58 · PVG 21:58 · LAX 05:58 · JFK 08:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.