Java-如何实现分布式事务锁?
最近做遇到一个问题,WEB项目中有一个兑换商品的功能,商品的数量是有限的,但是由于项目是分别部署到若干个机器上,在并发的情况下会导致商品的数量已经是0的情况下也兑换成功了,所以想实现一个分布式的锁,控制同一时间获得兑换的资源只能有一个,那么如何实现?有什么好的思路呢?
或者不用分布式锁怎么解决这个问题呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这个就是典型12306的购票问题。
如果你的并发非常大的话,可以考虑12306那种粗暴的30分钟排队机制。
如果想要实现更好的用户体验的话,可以弄成socket的方式,类似网络游戏的抢怪,谁先点到算谁的,所有人的数据是同步的,另外可以加入限制,只有有资格兑换的人才可以进入抢奖品页面。
简单一点就是队列,队列先进先出,出完了就没有了。商品10 插入队列,怎么争抢都不会出现两个人同时获取到一个值。如果怕数据丢失那就用FQueue,我不知道你是用什么语言,FQueue是可以保存在文件不丢失的。FQueue可以进程内也可以进程外。进程外就不管什么语言都可以。进程内不是java语言就要自己实现一下了。内存映射+文件。FQueue的添加都是bytes,所以你可以将一条数据(N多字段)序列化成bytes到FQueue,谁取到了拿着票号就去服务器去兑换。
实现单用户队列:
当同一个用户(该用户一定登录过网站是吧)用该功能的时候, 将同一用户放一个一个队列依次让其使用该功能
http游戏很常见