我想将 MySQL 表用作队列,并且我想与多个消费者同时使用它。我不希望任何两个消费者从中获得相同的条目。
我最初的想法是:
select *
from queue_table
order by entry_time desc
limit n for update;
会给我接下来的 n 个条目并锁定它们,以便其他消费者无法获得它们。问题是锁被放置在表和索引条目上,因此当其他消费者运行相同的查询时,它们会阻塞,直到第一个消费者完成他们的事务。我不希望每个消费者都等待其他消费者完成。我需要类似的东西:
select *
from queue_table
where *not already locked*
order by entry_time desc
limit n for update;
这样我就可以得到下一个未锁定的记录并继续前进。
这是可行的吗?