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