-
-
Notifications
You must be signed in to change notification settings - Fork 1
Feature Smart cache
Ограничение времени жизни singleton: cacheFor($id, $ttl) заставляет контейнер пересоздать сервис по истечении TTL. Плюс явная инвалидация. Уникальная для CloudCastle возможность среди сравниваемых контейнеров.
ContainerSmartCacheSupport хранит TTL per-id и per-tag (cacheFor, cacheTagFor). При get($id) контейнер проверяет, не истёк ли срок закэшированного экземпляра; если истёк — создаёт заново. forget($id), forgetTag($tag), forgetAll() — явная инвалидация; cacheStats($id) — состояние (настроен ли TTL, когда истекает). Первое задание TTL отключает fast-path get() (нужна проверка срока).
$c->set(ExchangeRates::class, fn () => Api::fetchRates());
$c->cacheFor(ExchangeRates::class, ttlSeconds: 300); // курсы «живут» 5 минут
$c->get(ExchangeRates::class); // создан
// … <5 мин — тот же экземпляр …
// … >5 мин — пересоздан свежими данными
$c->forget(ExchangeRates::class); // явно сбросить сейчас
$c->cacheStats(ExchangeRates::class); // ['configured' => true, 'ttl_seconds' => 300, 'expired' => …]- Свежесть данных для сервисов, кэширующих внешнее состояние (курсы, конфиг, справочники) без ручного менеджмента.
- Инвалидация по id и по тегу — точечная и групповая.
- Выключено по умолчанию — обычные singleton работают на fast-path.
- Первое задание TTL отключает fast-path
get()для всего контейнера (проверка срока) — небольшой overhead. - TTL — не замена внешнего кэша (Redis) для разделяемых между процессами данных.
- Применять к сервисам, инкапсулирующим «протухающие» данные (курсы, feature-flags, справочники).
- Комбинировать с тегами:
cacheTagFor('external', 60)+forgetTag('external')при событии обновления.
- Городить TTL на stateless-сервисы (клиенты, репозитории) — им пересоздание не нужно.
- Ожидать, что TTL синхронизирует кэш между процессами/воркерами (это in-process).
| Контейнер | Аналог |
|---|---|
| PHP-DI | нет (❌ — кэш определений, но не TTL экземпляров) |
| Symfony | нет в DI ( |
| Laravel | нет в контейнере (❌ — отдельный Cache) |
| Pimple | нет (❌) |
| Nette | нет (❌) |
Только CloudCastle даёт TTL singleton-экземпляров внутри контейнера.
См. также: Фабрики и singleton · Теги.
CloudCastle DI · · PHP 8.1+ · PSR-11
GitHub · Packagist · Releases · Discussions · Сравнение
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)
- 🏗️ Архитектура
- ⚡ Быстрый старт
- 📊 Сравнение — 5 аналогов, таблица + победители
- 🧩 Возможности (детально) — каждая фича: принцип, +/−, аналоги
- 🧪 Bootstrap
- 🚀 Compiled container
- 🔗 Contextual binding
- 🤖 Autowiring
- 📄 Конфигурация
- 📖 Справочник конфигурации
- 📂 Сканирование классов
- 🌍 Глобальный реестр
- 🏷️ Теги и декораторы
- 🔗 call(), bind(), hooks
- 🔄 Прототипы, alias, lazy, lazyGhost
- 📋 Справочник API
- 🏭 Фабрики и singleton