后台如何知道有多少人正在购买这个产品,订单处理程序如何让一个人购买成功付款后,前台提示购买的人数减一,这个是通过查询下单未付款的订单量来实现的么?然后在反馈到客户的浏览器端? 程序如何处理一个个的购买,避免大量并发,造成数据出问题,通过数据库锁定么?
做过类似项目的,能把整个思路介绍一下么,谢谢了
定义一个全局线程安全队列.然后就完了.
你好,你给的建议,我不是太理解,能简单介绍下,实现过程么?“定义一个全局线程安全队列”。。谢谢了
@小明同学: 你的这些东西都是队列能实现的,
1.正在处理订单数,就是队列长度.
2.一个一个处理购买,就是出队处理.
3.并发问题,出队处理做到线程安全
就可以了
你这个实现就得让他排队,排队有很多种实现,最简单的是加锁,当然还有其他的。
看看锁吧,还有数据库的事务,
这种当然要用消息队列了,把订单内容提交到消息队列里面,然后直接返回成功页面,再写专门的程序处理消息队列中的内容,大网站处理订单基本都是这样的,只不过人家用的服务器集群。
队列可以用到的技术有很多,MQ,RabbitMQ。。。。http://www.cnblogs.com/amityat/archive/2011/08/31/2160293.html
可以使用redis内存里的队列
给你一个廉价版本的思路:
1.做一个“叫号机”Class
2.每个订单生成后,都到叫号机那里取一个号(记得发号方法必须线程安全)
3.订单放入订单队列中(必须线程安全),也可以直接写入SQL Server表(简单)
4.处理器线程每次从订单队列(或者SQL表)中读取Min(编号>当前编号)的数据
5.处理器的当前处理编号和当前订单编号之差就是你前面还有几个订单。
注意:这个只是一个示意,代表了解决问题的思路。也可以用队列的物理次序以及队列长度来作为订单次序和前序有多少订单。
用生产消费者模式,单一对象。或者用system.threading.enter 锁,保证库存。
有没有简单的demo可供学习呢?