Наверное, стоит в списке хранить только ключи, а значения хранить в парах ключ-значение. Чуть прибавится операций:
- при вставке смотреть, есть ли уже такой ключ, если есть только обновить значение. Если нет – то ещё и вставить в список.
- при обработке / извлечении из списка – брать значение и удалять ключ-значение.
Вставка значения:
SET key value GET
– вернёт предыдущее значение, если было, или NULL. Если NULL, то надо ещё
LPUSH queueName key
Извлечение значения:
RPOP queueName
– вытащили ключ из очереди.
GETDEL key
– получили значение + удалили ключ-значение.
Разумеется, надо позаботиться, чтобы ключи не конфликтовали с другими данным в редиске, в т.ч. с самой очередью. Может, всем ключам дописывать некий префикс.