我需要一个简单的表格作为队列。
我的MySQL服务器限制是我不能使用InnoDB表,只能使用MyISAM。
客户端/工作者将同时工作,他们每次都需要接收不同的任务。
我的想法是按照以下方式进行(伪代码):
$job <- SELECT * FROM queue ORDER BY last_pop ASC LIMIT 1;
UPDATE queue SET last_pop WHERE id = $job->id
return $job
我尝试了表锁和"GET_LOCK",但没有任何作用,工作者有时会收到相同的任务。
SELECT
之前的UPDATE
失败会导致一个孤立的项目。START TRANSACTION
和COMMIT
是必要的,以避免这种风险。 - danortonlast_pop
字段包含什么吗?此外,consumer_id
是工作进程的唯一代码编号吗? - ethanpil