Я знаю, что это старо, но подумал, что я бы здесь добавил свои два цента, так как я написал несколько многоуровневых кэшей или, по крайней мере, несколько итераций одного.
Учтите это;Каждое приложение будет иметь разные уровни, и на каждом уровне может быть кэширована различная форма информации.Срок действия каждого элемента кэша обычно истекает по одной из двух причин: либо истек период времени, либо обновлена зависимость.
Для этого объяснения давайте представим, что у нас есть три слоя:
- Шаблоны (определения объектов)
- Объекты (полный кэш объектов)
- Блоки (частичные объекты / кэш блоков)
Каждый уровень зависит от его родителя, и мы определяем те, которые используют некоторую форму назначения зависимостей.Таким образом, блоки зависят от объектов, которые зависят от шаблонов.Если объект изменяется, любые зависимости в блоке будут удалены и обновлены;если шаблон будет изменен, любые объектные зависимости будут удалены, в свою очередь удалены все блоки, и все будут обновлены.
Есть несколько преимуществ, большое время истечения которых большое, поскольку зависимости гарантируют, что ресурсы ниже по течениюобновляются всякий раз, когда обновляются родители, поэтому вы не получите устаревшие кэшированные ресурсы.Одно только блочное кэширование - большая помощь, потому что, если не считать кэширования всей страницы (которое требует AJAX или Edge Side Include, чтобы избежать кэширования динамического содержимого), блоки будут ближайшими элементами к браузеру / интерфейсу конечных пользователей и могут сохранить нагрузку предварительной обработкициклы.
Сложность в многоуровневом кеше, подобном этому, заключается в том, что он, как правило, не может полагаться на чистку внешнего ключа на основе БД, то есть, если каждый уровень не равен 1: 1 по отношению к его родительскому(т.е. блок будет полагаться только на один объект, который опирается на один шаблон).Вам придется программно решить проблему удаления зависимых ресурсов.Вы можете сделать это с помощью хранимых процедур в БД или на уровне приложения, если хотите динамически работать с правилами удаления.
Надеюсь, что это кому-нибудь поможет:)
Edit: Я должен добавить, что любой из этих уровней может быть кластеризован, защищен или иным образом в масштабируемой среде, поэтому эта модель работает как в малых, так и в больших средах.