Как я могу гарантировать, что по истечении срока действия кеша он будет восстановлен один раз и данные останутся нетронутыми?
Подход к кешированию, который я использую, заключается в отсутствии лучшегоСловом, "ленивая" реализация.То есть вы не кэшируете что-то, пока не получите его один раз, в надежде, что кому-то это понадобится снова.Вот псевдокод того, как этот алгоритм будет выглядеть:
// returns false if there is no value or the value is expired
result = cache_check(key)
if (!result)
{
result = fetch_from_db()
// set it for next time, until it expires anyway
cache_set(key, result, expiry)
}
Это очень хорошо работает для того, для чего мы хотим его использовать, если вы используете кэш разумно и понимаете, что не вся информация являетсятак же.Например, в гипотетической системе комментариев пользователей вам не нужно время истечения, потому что вы можете просто аннулировать кэш всякий раз, когда новый пользователь публикует комментарий к статье, поэтому в следующий раз комментарии загружаются,они перечитаны.Однако некоторая информация (данные о погоде приходят на ум) должна истечь вручную, так как вы не полагаетесь на пользовательский ввод для обновления своих данных.
Для чего стоит использовать memcache в кластерной среде, и выдолжно найти, что настроить что-то подобное не сложно, поэтому это должно легко масштабироваться до того, что вам нужно.