Адаптер цепочки кеша

Этот адаптер позволяет комбинировать любое количество других доступных адаптеров кеша. Кешированные объекты извлекаются из первого адаптера, содержащего их, и кешированные объекты сохраняются во все данные адаптеры. Это предоставляет простой и эффективный метод создания многослойного кеша.

ChainAdapter необходимо предоставить массив адаптеров и по желанию максимальное время жизни кеша, в качестве аргументов конструктора:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
use Symfony\Component\Cache\Adapter\ApcuAdapter;

$cache = new ChainAdapter(array(

    // упорядоченный список адаптеров, использованных для извлечения кешированных объектов
    array $adapters,

    // максимальное время жизни объектов, распространённых из нижних адаптеров в высшие
    $maxLifetime = 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(array(
    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();

Note

Начиная с Symfony 3.4, этот адаптер реализует PruneableInterface, позволяя ручное отсечение просроченных записей кеша, путём вызова его метода prune().

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.