Редис вообще хорошо для этого подходит. Для легковесных вариантов мне лично больше нравится
BLPOP + RPUSH — блокирующий pop слева, пополнение задач справа. Ну или наоборот. В чистом виде FIFO-очередь, плюс воркеры могут легко вернуть задачу обратно через тот же RPUSH в случае временной ошибки. BLPOP отдает и ключ, из которого удалось pop-нуть, и само значение. Так удобно дифференцировать сами задачи.
Вопрос 1 — При blpop-е ставить ключ с идентификатором задачи куда-то. В хэш или просто в кейспейс. Откат — через транзакции, естественно, оборачивая все тело воркера в абсолютный отлов исключений.