TAG | memcached queue
memcached очень интересная и быстрая вещь, но попытки реализовать на нём очередь/стек терпели неудачу из-за ситуации гонок.
Я должен получить последний элемент (А) и дописать следующий. Но я не уверен, будет ли элемент А последним на момент записи следующего.
Получалась такая ситуация:
(1-й процесс) $m->get(‘last’);
(2-й процесс) $m->get(‘last’);
…
(1-й процесс) $m->set(‘last’=>$modified_last);
(2-й процесс) $m->set(‘last’=>$modified_last); #превед!!
Вариант решения проблемы
# добавление в очередь
my $tail=$m->incr(‘tail’);
$m->set(“queue_$tail”=>$data);
# удаление из неё:
my $head=$m->incr(‘head’)-1;
$m->get(“queue_$tail”);
Может быть я перепутал с голову с хвостом, но этот вариан не боится ситуации гонок.
