php消息队列

Php消息队列

  首先说一下队列,它是一种只能在队尾插入,在队首取出的数据结构。Php中整个系统的消息队列需要借助数据库完成,如果是一个对性能没有要求的队列,可以借助mysql实现,如果对系统要求比较高或其他限制可以考虑Redis等菲关系型数据库。

举个例子:

  我在做一个全返模式的商城的时候有这样一个功能:用户确认收货之后需要做的工作很多,有给上三级(如果是三级分销)分佣、添加资金流动记录、进入排队(每100元一个队号)、计算出队的队号(进?出一)并返现到账户余额等。你可能会说直接写就行了,但是如果是他这一单的订货数量比较大呢?你可能还会说直接在程序里计算好要给那些队号返现,那你肯定没有考虑并发的可能。所以,这个问题最好的解决办法就是应用消息队列的思想。

我的实现方法:

  订单分两个表,一个是总表(order),记录所有的订单;一个是已经付款但未完成收货的表(unreceive_order)。当用户确认收货之后修改order表的订单状态、把该订单id、商品id、订单总金额存入unreceive_order表,unreceive_order表就是一个消息队列。数据库就这样了,下面说程序。

  设计一个循环程序,每次从unreceive_order表读取数据进行处理,如果没有数据可以用sleep函数让程序休息一段时间,处理完成就把这些数据从unreceive_order表删掉,然后把这个程序做成跟随系统启动的服务,就大功告成了。

posted @ 2017-08-10 11:24  Burning_Leaf  阅读(198)  评论(0编辑  收藏  举报