Do you really need Redis? How to get away with just PostgreSQL
You really don't need anything fancy to implement a queue using SQL. You need a table with a primary id and a "status" field. An "expired" field can be used instead of the "status". We used the latter because it allows easy retries.<p>1. SELECT item_id WHERE expire = 0. If this is empty, no items are available.<p>2. UPDATE SET expire = some_future_time WHERE item_id = $selected_item_id AND expire = 0. Then check whether UPDATE affected any rows. If it did, item_id is yours. If not, loop. If the database has a sane optimizer it'll note at most one document needs locking as the primary id is given.<p>All this needs is a very weak property: document level atomic UPDATE which can return whether it changed anything. (How weak? MongoDB could do that in 2009.)<p>Source code at <a href="https://git.drupalcode.org/project/drupal/-/blob/9.2.x/core/lib/Drupal/Core/Queue/DatabaseQueue.php#L116" rel="nofollow">https://git.drupalcode.org/project/drupal/-/blob/9.2.x/core/...</a> (We cooked this up for Drupal in 2009 but I am reasonably sure we didn't invent anything new.)<p>Of course, this is not the fastest job queue there is but it is quite often good enough.