2012-02-12 105 views
1

如果我正在寫票務系統,客戶選擇票證,我想鎖定它3分鐘(如票務大師),直到他們完成訂單或時間用完爲止,我怎麼能做到這一點?我想避免讓客戶放棄他們的會話/應用程序崩潰,然後永久終止鎖定在數據庫中的票證。購物車超時

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

回答

5

只是有一個單獨的表,可以容納所有當前的預訂。例如:

**Reservations** 
UserID 
TicketID 
ExpiryDate 

這將不依賴於會話。您甚至不需要刪除過期記錄,即當新客戶查詢故障單時,查找所有可用的座位,而這些座位在expirydate> now的預訂表中不存在。

避免更復雜的定時事件系統和類似的事情,保持簡單。

0

擁有定期解鎖過期故障單鎖的故障單過期服務。 記錄到期時間和票證(可能使用會話ID)。 訂單可以在不再需要時刪除它,或者在發生失敗時它會自動解鎖。

0

如果你可以識別每張票,你可以給這張票分配鎖定信息,包含關於用戶,訂單等的數據,當然 - 時間戳會保存鎖定到期的時間。

如果另一個用戶想要選擇票證,則只需檢查此時間戳以查看鎖是否已過期。

+0

這也是一個很好的解決方案。 – user1205641 2012-02-13 12:10:58