ASP.NET 抢红包/抢票程序 --排队

JJYY0088 2015-03-30 10:11:49
现在做一个抢红包程序,纠结一个问题,领红包的人 如何先进先出(先进来的可以抢到红包),控制好这个排队的过程。

涉及哪方面的技术??
...全文
267 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
static Queue<T>,超出多少后,再后面的就不用进队列了 通过lock
JJYY0088 2015-03-30
  • 打赏
  • 举报
回复
多用户 抢红包,我用什么保存到统一的Queue<T> 里面 ?? session ??
  • 打赏
  • 举报
回复
Queue<T>
  • 打赏
  • 举报
回复
高性能的web软件设计,并不是丢弃比较低级的数据结构(或者设计模式)名词儿就能解决问题的。

本来人家的网页都在那里“卡死”而自然地形成了排队效应了,你再来死抠字眼儿而额外多整出一个 Queue 层数结构来,能提高什么效率呢?

.net framework中有一系列优化过的任务排队机制,例如系统线程池机制,用不着自己手动编写一套更简单、性能低下的 DequeueMessageThread。关键是现在首先要针对实际问题的本质来设计解决方案,而不是搞简单的技术学习。
  • 打赏
  • 举报
回复
我以前的一个回复,给你在这里抄过来一下: 传统的电商下订单操作本身往往需要一个“很长的业务链”,而且后台需要访问相对一致的数据库系统。所以就算是有许多接入服务器,那么算法本身、以及访问数据库方面,也会成为瓶颈。 对后台业务操作的异步化流程改造是最为核心的技术,因为只有这样你才打开了自由之门。传统的操作,程序员觉得比较简单好理解的操作往往是同步的。例如用户下单时,程序员可能以为要将数据库相关的改变全都改变完成,甚至将从一个库存调入另一个库存的转移成本都给计算好了,再给用户界面反馈结果。而进行改造之后,应该在“一瞬间”先反馈结果,而与用户界面没有直接关系的操作全都异步执行。 进一步,这些异步执行的东西,要求能够分布式服务器集群来执行。这样就可以随时水平扩展服务器。 返回头来,秒杀商品应该单品编码。秒到、秒不到某商品就是去执行一个“FindOneAndRemove”原子操作。而各个秒杀线程不需要进行“本次秒杀还剩下有多少商品可以秒杀”的协同(加锁)查询。 给秒杀用户界面进行反馈的一瞬间,异步地,把秒杀商品(单品)放入用户的购物车中,然后用户就可以使用普通的购物网页去支付。 客户端的秒杀程序是一个javascript富客户端程序,它虽然在购物页面上,但是可以自动负载均衡地查找反应最快的秒杀服务器地址,而不是访问商品浏览网页所用的服务器。这样,对那些浏览器商品的用户没有任何影响。 如果进行这个FindOneAndRemove原子操作达不到每秒1万次的速度(重要!),那么可以把秒杀商品编码数据放到单独一个服务器的“内存数组”中(查到一个商品编码之后就将数组单元的值修改为0值),这个服务器仅仅对其它服务器提供一个单独的FindOneAndRemove原子服务。由于此数据和操作与系统中其它数据库、其它服务完全分开,对其它系统的影响很小,可以让迟早会失败的排队者尽早失败。 这里的功能点:1. 商品的单品管理流程。 2. 异步多线程操作。 3. 分布式任务调度系统。 4. 将顶层业务数据放入拆分的SOA中。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧