【问题标题】:How to handle concurrent bids in an online auction?如何处理在线拍卖中的并发出价?
【发布时间】:2022-11-17 00:38:22
【问题描述】:

我想了解系统如何处理并发出价。两个投标人可能会同时出价相同的金额,甚至可以精确到毫秒(考虑到有大量用户正在为该项目出价)。在那种情况下,系统将如何管理投标?

例如; 让我们假设一个吊坠是为了出价而放置的。当前出价为 3.75 美元。现在下一个投标人必须出价 4 美元或更多。现在,两个投标人(多个投标人)同时出价 4 美元,因为他们看到的当前出价是 3.75 美元。多个投标人同时出价相同的金额。系统现在将如何处理出价?如果他们中的任何一个出价早了一点,那么下一个出价者的出价就必须比前一个出价者多一点。但在这种情况下,两个投标人恰好在同一时间为同一物品出价相同。

谁的出价被认为是当前出价?

【问题讨论】:

  • 嘿@guru-dev 你有没有自己想出任何解决方案?我有同样的问题困扰着我:)。
  • 您可以根据需要在这种情况下制定规则,您要么接受最早的出价,要么接受最晚的出价,精确到毫秒,假设两者都被接受。这取决于你的逻辑。如果您连续处理它们(为该拍卖锁定出价表的队列或数据库事务),那么您将拒绝重复的出价,因为至少其中一个已经被处理并且用户必须重新出价。如果这是在拍卖的最后几秒,通常的做法是自动延长拍卖时间。

标签: concurrency queue


【解决方案1】:

我认为你可能会带来的最少的东西是数据库事务(这可能会降低你的用户体验)但是,我认为在这种情况下尝试使用 Redis 是值得的!

由于 Redis 是单线程的。

而且我还认为您可能会利用它的 INCR 功能,因为它是恕我直言的最佳方式。


笔记:

我相信 Redis 从版本 6 (CMIIW) 开始也一直支持 Transaction,但是请注意 Redis 的 Transaction 不支持回滚.

阅读有关 Redis TransactionINCR 的更多信息。

【讨论】:

    猜你喜欢
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多