EE_FrameWork использует единый слой CacheManager, который умеет работать с файловым backend и Redis.
- route cache;
- HTML cache;
- block cache.
- админка не должна кэшироваться как публичная часть;
- HTML cache обязан учитывать контекст запроса;
- route cache нужно уметь реально выключать и очищать;
- кэш нельзя считать заменой корректному lifecycle.
Ключевые возможности:
- единый API для file/redis backend;
- namespace/version изоляция;
- context-aware HTML cache;
- selective invalidation по section.
Контекст HTML cache включает:
schemehostlanguageparam$_GET
Именно поэтому HTML, сгенерированный для одного host/scheme, не должен утекать на другой host.
Router умеет кэшировать разбор маршрута.
Используйте это аккуратно:
- после деплоя route cache нужно чистить;
- при активной разработке route cache проще держать выключенным;
- на production он полезен, только если вы контролируете инвалидацию.
Подходит, если:
- приложение развёрнуто на одном хосте;
- кэш умеренный по объёму;
- нужна простая эксплуатация.
Подходит, если:
- инстансов несколько;
- нужна более быстрая работа с кэшем;
- нужна централизованная очистка;
- вы готовы сопровождать Redis как инфраструктуру.
Минимум:
- длительность тяжёлых сценариев;
- время rebuild index/filter lifecycle;
- ошибки Redis/file cache;
- cache invalidation события.
Для production-практики полезно отдельно логировать:
- долгие импорты;
- route cache очистки;
- массовые lifecycle rebuild;
- cache stampede-like сценарии.
Симптом:
- пользователь видит контент другого host или языка.
Причина:
- ключ не учитывает контекст запроса.
Симптом:
- новый контроллер не виден;
- старый маршрут продолжает вести не туда.
Причина:
- не очищен route cache.
Симптом:
- данные в БД уже обновились, а интерфейс показывает старое.
Причина:
- save-flow не чистит затронутый HTML cache.
Во время активной разработки:
- route cache лучше выключать;
- HTML cache либо выключать, либо чистить очень часто;
- если страница ведёт не туда, сначала очищать route cache и смотреть
logs/router_error/....
- включать только те виды кэша, поведение которых вы понимаете;
- держать отдельные admin actions для очистки route/html cache;
- не использовать глобальный destructive flush для shared Redis;
- фиксировать namespace/version проекта.