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

2019-06-01 15:48:43 +08:00
 teemoer

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

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

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

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

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

望大佬指教,感激不尽。

3700 次点击
所在节点    Java
4 条回复
polymerdg
2019-06-01 16:11:48 +08:00
用計數器不行麼?
tms
2019-06-01 18:12:00 +08:00
上队列然后路由同一个用户的消息给同一个消费者处理
anyele
2019-06-03 01:10:24 +08:00
用队列
gaobing
2019-06-03 18:30:05 +08:00
消息队列,削峰

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/569758

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX