Адаптер цепочки кеша
Дата обновления перевода 2023-08-15
Адаптер цепочки кеша
Этот адаптер позволяет комбинировать любое количество других доступных адаптеров кеша . Кешированные объекты извлекаются из первого адаптера, содержащего их, и кешированные объекты сохраняются во все данные адаптеры. Это предоставляет простой и эффективный метод создания многослойного кеша.
ChainAdapter необходимо предоставить массив адаптеров и по желанию максимальное время жизни кеша, в качестве аргументов конструктора:
1 2 3 4 5 6 7 8 9
use Symfony\Component\Cache\Adapter\ChainAdapter;
$cache = new ChainAdapter(
// Упорядоченный список адаптеров, используемых для получения кешированных объектов
array $adapters,
// Время жизни по умолчанию объектов, распространямых из нижних адаптеров в верхние
$defaultLifetime = 0
);
Note
Если объект не найден в первом адаптере, но найден в следующих, этот адаптер гарантирует, что извлечённый объект сохранён во все адаптеры, где его ранее не хватало.
Следующий пример демонстрирует, как создать экземпляр цепочки адаптеров, используя самые быстрые и медленные системы хранения, ApcuAdapter и FilesystemAdapter, соответственно:
1 2 3 4 5 6 7 8
use Symfony\Component\Cache\Adapter\ApcuAdapter;
use Symfony\Component\Cache\Adapter\ChainAdapter;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
$cache = new ChainAdapter([
new ApcuAdapter(),
new FilesystemAdapter(),
]);
При вызове метода этого адаптера prune(), вызов делегируется всем совместимым с ним адаптерам кеша. Можно безопасно смешивать адаптеры, которые реализуют и не реализуют PruneableInterface, так как несовместимые адаптеры тихо игнорируются:
1 2 3 4 5 6 7 8 9 10 11
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();