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