0
我想使用MySQL表作为队列,并且我想将它与多个使用者同时使用。我不希望任何两个消费者从中获得相同的条目。需要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;
这样我就可以得到下n个解锁的记录,并在我的路上。
这是可行的吗?
我喜欢它。我唯一担心的是如果消费程序在处理它们时出现问题,请解锁这些记录。特别是如果消费程序由于某种原因死亡并且不能单独解锁它们。然后他们被锁定,但未经处理,没有任何东西可以再次使用。也许设置一个locked_at与locked_by以及任何处于锁定状态X的时间的记录也是公平的游戏? – user1793034 2013-04-26 16:09:15