Как говорится в старой шутке: «В компьютерной науке есть только две серьезные проблемы. Именование, аннулирование кэша и отключение одной ошибкой».
Так что это сложная проблема, и она должна быть трудной.
Я хотел бы предположить, что важно не то, как недавно были возвращены данные, а то, как недавно данные были кэшированы.В противном случае часто запрашиваемая часть данных может устареть и оставаться в ней бесконечно долго.(Смотри, я сказал, что аннулирование кэша сложно!)
Это говорит о том, что временные метки должны основываться на том, когда кэш был недавно обновлен.Таким образом, вы можете просто вернуть данные, если они менее 1,5 часов.Если ему 1,5-2 часа, вы подбрасываете монету.(с возрастающей вероятностью перевернуть его).Если вы старше, вы рассматриваете это как недействительное.Эта стратегия делает вероятным, что данные обновляются только один раз, даже если к ним осуществляется очень активный доступ.
При таком подходе требуется отметка времени для каждого свойства.И позволяет заданию, которое знает, что оно изменило некоторые из этих данных, превентивно лишает законной силы некоторые поля.Когда вы идете, чтобы заполнить объект, вы знаете, что это произошло, потому что есть ссылка на данные, которых там нет, и вы знаете, что вам нужно обновить их.(Независимо от того, выполняется ли обновление на уровне кэширования или на уровне приложений, это решение по проекту может быть принято в любом случае.)