Самая большая проблема с механизмом кэширования - устаревшие данные. Поскольку данные кэшируются, они могут быть такими же старыми, как и время жизни кэша. В транзакционных системах это недопустимо, но для других систем это нормально. Просто поймите, сколько лет данным. Я не знаю, можно ли сохранить кеш, но если вы собираетесь пойти в базу данных, я бы не рекомендовал использовать кеш в первую очередь, так как часть этого вопроса - быстрый доступ в память к вашим данным.
Да, для кэширования используется централизованное хранилище в памяти, например, Singleton. Ответ на ваш вопрос о мьютексах заключается в том, что это зависит от ваших схем доступа к данным. Большинство людей используют кеши для заполнения данных один раз. Если значение истекло, кеш обнуляет их запись, и они снова заполняются. Да, вы можете защитить доступ с помощью Mutex (или, скорее, оператора lock
), чтобы предотвратить одновременное заполнение кэша несколькими клиентами. Но IMO - это скорее точка производительности, чем точка согласованности данных, поскольку, по всей вероятности, клиенты будут переписывать друг с другом одни и те же данные (опять же, это зависит от вашей ситуации).