Адаптер цепочки кеша¶
Этот адаптер позволяет комбинировать любое количество других доступных адаптеров кеша. Кешированные объекты извлекаются из первого адаптера, содержащего их, и кешированные объекты сохраняются во все данные адаптеры. Это предоставляет простой и эффективный метод создания многослойного кеша.
ChainAdapter необходимо предоставить массив адаптеров и по желанию максимальное время жизни кеша, в качестве аргументов конструктора:
use Symfony\Component\Cache\Adapter\ApcuAdapter;
$cache = new ChainAdapter(array(
// упорядоченный список адаптеров, использованных для извлечения кешированных объектов
array $adapters,
// максимальное время жизни объектов, распространённых из нижних адаптеров в высшие
$maxLifetime = 0
));
Note
Если объект не найден в первом адаптере, но найден в следующих, этот адаптер гарантирует, что извлечённый объект сохранён во все адаптеры, где его ранее не хватало.
Следующий пример демонстрирует, как создать экземпляр цепочки адаптеров, используя самые
быстрые и медленные системы хранения, ApcuAdapter
и FilesystemAdapter
, соответственно:
use Symfony\Component\Cache\Adapter\ApcuAdapter;
use Symfony\Component\Cache\Adapter\ChainAdapter;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
$cache = new ChainAdapter(array(
new ApcuAdapter(),
new FilesystemAdapter(),
));
При вызове метода этого адаптера prune()
,
вызов делегируется всем совместимым с ним адаптерам кеша. Можно безопасно смешивать адаптеры,
которые реализуют и не реализуют PruneableInterface
,
так как несовместимые адаптеры тихо игнорируются:
use Symfony\Component\Cache\Adapter\ApcuAdapter;
use Symfony\Component\Cache\Adapter\ChainAdapter;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
$cache = new ChainAdapter(array(
new ApcuAdapter(), // НЕ реализует PruneableInterface
new FilesystemAdapter(), // РЕАЛИЗУЕТ PruneableInterface
));
// prune проксирует вызов в FilesystemAdapter, тихо пропустив ApcuAdapter
$cache->prune();
Note
Начиная с Symfony 3.4, этот адаптер реализует PruneableInterface
,
позволяя ручное отсечение просроченных записей кеша,
путём вызова его метода prune()
.
Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.