如果我正在写一个票务系统,客户选择票证,我想锁定它3分钟(如票务主人),直到他们完成订单或时间用完,我怎么能这样做?我希望避免让客户放弃他们的会话/应用程序崩溃,然后最终将数据库永久锁定在数据库中。
我正在使用nHibernate作为我的ORM和C#。
答案 0 :(得分:6)
只需拥有一个包含所有当前预订的单独表格。例如:
**Reservations**
UserID
TicketID
ExpiryDate
这将不依赖于会话。您甚至不需要删除过期的记录,当新客户查询票证时,在expirydate>的预订表中找到所有可用的座位。现在
避免使用更复杂的定时事件系统和类似事件,保持简单。
答案 1 :(得分:0)
有一个票证到期服务,定期解锁过期的票证锁。 记录到期时间和票证(可能带有会话ID)。 该订单可以在不再需要时将其删除,或者在faliure的情况下,它将自动解锁。
答案 2 :(得分:0)
如果您可以识别每个故障单,您可以为此故障单分配锁定信息,其中包含有关用户,订单等的数据,当然还有锁定到期时间的时间戳。
如果其他用户想要选择故障单,您只需要检查此时间戳以查看锁定是否已过期。