Кэширование как раз делается для экономии обращения к более дорогим/медленным ресурсам. Устанавливается срок действия ключа, по необходимости. Самые главные преимущества - независимость от хранения при перезагрузке программы (при крахе или просто выпуске новой версии) и масштабируемость архитектуры. В случае Redis весь список можно держать в одном ключе. Можно, запуская (под)программу в планировщике задач ежечасно, просто в цикле получить структуру, сериализовать в виде JSON, XML, Msgpack и записать байты как элемент списка в Redis.
Затем, при получении нужного списка просто проверяешь есть ли данные по ключу и если есть, распаковываешь в свои структуры данных в памяти и используешь в логике программы.
А мьютексы и локи вообще не нужны для этих целей.
Добавлено
Использовать СУБД - тоже нормальный вариант и не надо стесняться его использовать. Тем более, не нужно добавлять дополнительные единицы хранения типа Redis.