我正在建立一个拍卖网站,我想确保在相似的时间关闭多个拍卖会没有问题。我对cflock有一个基本的了解,并且想知道这个或者像cfthread这样的其他人如何能够最佳地应用以保护这个过程免受竞争条件的影响。
到目前为止,我的处理方式如下:
当拍卖达到收盘时间时,我最初将状态设置为“1”以表示拍卖正在结束。然后,站点用户在关闭过程发生时会看到消息“Closing”。
close_auction.cfm
<cfset resUpdateStatus = oListing.updateStatus(listing_id=url.listing_id, status=1)>
然后调用closeAuction()函数:
<cfset resCloseAuction = oListing.closeAuction(listing_id=url.listing_id)>
listing.cfc
closeAuction()函数,我正在使用cflock:
<cflock timeout="30" name="closeAuction_#arguments.listing_id#" type="exclusive">
<cftransaction>
<!--- if for whatever reason auction closure time not yet reached, delay a few seconds --->
<cfloop condition = "now() lt qListing.end_date">
<cfset oSystem.pause(TimeDelay=5)>
</cfloop>
<!--- processing here --->
- select on listing table to ensure listing still exists
- select on bids table - check high bid, determine if winner
- update listing table - status, winner_id, close_date etc
- update user_subscription table
- delete scheduled task that auto-closes the auction
- update tracking table
- delete listing from users' watchlists
</cftransaction>
</cflock>
这在测试单一拍卖时工作正常,但我担心在重负荷下可能会发生什么,许多拍卖可能会在几秒内完成。任何防弹的建议都将受到赞赏。
我在CF12上
更新
更新以显示cftransaction内的处理