2012-02-12 40 views
1

如果我正在写票务系统,客户选择票证,我想锁定它3分钟(如票务大师),直到他们完成订单或时间用完为止,我怎么能做到这一点?我想避免让客户放弃他们的会话/应用程序崩溃,然后永久终止锁定在数据库中的票证。购物车超时

我为我的ORM和C#使用nHibernate。

回答

5

只是有一个单独的表,可以容纳所有当前的预订。例如:

**Reservations** 
UserID 
TicketID 
ExpiryDate 

这将不依赖于会话。您甚至不需要删除过期记录,即当新客户查询故障单时,查找所有可用的座位,而这些座位在expirydate> now的预订表中不存在。

避免更复杂的定时事件系统和类似的事情,保持简单。

0

拥有定期解锁过期故障单锁的故障单过期服务。 记录到期时间和票证(可能使用会话ID)。 订单可以在不再需要时删除它,或者在发生失败时它会自动解锁。

0

如果你可以识别每张票,你可以给这张票分配锁定信息,包含关于用户,订单等的数据,当然 - 时间戳会保存锁定到期的时间。

如果另一个用户想要选择票证,则只需检查此时间戳以查看锁是否已过期。

+0

这也是一个很好的解决方案。 – user1205641 2012-02-13 12:10:58