Адаптер ланцюжку кешу

Дата оновлення перекладу 2023-08-15

Адаптер ланцюжку кешу

Цей адаптер дозволяє комбінувати будь-яку кількість інших доступних адаптерів кешу . Кешовані обʼєкти вилучаються з першого адаптера, що їх містить, і кешовані обʼєкти зберігаються у всі надані адаптери. Це надає простий та ефективний метод створення багатошарового кешу.

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

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

$cache = new ChainAdapter(
    // впорядкований список адаптерів, використаних для вилучення кешованих обʼєктів
    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([
    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();