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

Дата обновления перевода 2023-01-20

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

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

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();