PHP + MySQL Queue

前端 未结 3 1276
挽巷
挽巷 2021-02-04 19:58

I need a simple table that acts as a Queue. My MySQL server restriction is I can\'t use InnoDB tables, only MyISAM.

Clients/workers will work at the same time and they w

3条回答
  •  名媛妹妹
    2021-02-04 20:29

    You need to turn your ordering around so there is no timing window.

    Consumer POP (each consumer has a unique $consumer_id)

    Update queue 
    set last_pop = '$consumer_id' 
    where last_pop is null 
    order by id limit 1;
    
    $job = 
      Select * from queue 
      where last_pop = '$consumer_id' 
      order by id desc 
      limit 1;
    

    Supplier PUSH

    insert into queue 
      (id, last_pop, ...) 
    values 
      (NULL, NULL, ...);
    

    The queue is ordered in time by the id column and assigned upon POP by to the consumer_id.

提交回复
热议问题