Java-如何实现分布式事务锁?

发布于 2017-09-16 12:29:18 字数 165 浏览 1435 评论 3

最近做遇到一个问题,WEB项目中有一个兑换商品的功能,商品的数量是有限的,但是由于项目是分别部署到若干个机器上,在并发的情况下会导致商品的数量已经是0的情况下也兑换成功了,所以想实现一个分布式的锁,控制同一时间获得兑换的资源只能有一个,那么如何实现?有什么好的思路呢?
或者不用分布式锁怎么解决这个问题呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

虐人心 2017-10-07 16:41:59

这个就是典型12306的购票问题。
如果你的并发非常大的话,可以考虑12306那种粗暴的30分钟排队机制。
如果想要实现更好的用户体验的话,可以弄成socket的方式,类似网络游戏的抢怪,谁先点到算谁的,所有人的数据是同步的,另外可以加入限制,只有有资格兑换的人才可以进入抢奖品页面。

灵芸 2017-10-03 15:11:37

简单一点就是队列,队列先进先出,出完了就没有了。商品10 插入队列,怎么争抢都不会出现两个人同时获取到一个值。如果怕数据丢失那就用FQueue,我不知道你是用什么语言,FQueue是可以保存在文件不丢失的。FQueue可以进程内也可以进程外。进程外就不管什么语言都可以。进程内不是java语言就要自己实现一下了。内存映射+文件。FQueue的添加都是bytes,所以你可以将一条数据(N多字段)序列化成bytes到FQueue,谁取到了拿着票号就去服务器去兑换。

偏爱自由 2017-09-29 16:42:13

实现单用户队列:
当同一个用户(该用户一定登录过网站是吧)用该功能的时候, 将同一用户放一个一个队列依次让其使用该功能

http游戏很常见

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文