Chain Cache Adapter¶
This adapter allows combining any number of the other available cache adapters. Cache items are fetched from the first adapter containing them and cache items are saved to all the given adapters. This exposes a simple and efficient method for creating a layered cache.
The ChainAdapter must be provided an array of adapters and optionally a maximum cache lifetime as its constructor arguments:
use Symfony\Component\Cache\Adapter\ChainAdapter;
$cache = new ChainAdapter(
// The ordered list of adapters used to fetch cached items
array $adapters,
// The max lifetime of items propagated from lower adapters to upper ones
$maxLifetime = 0
);
注釈
When an item is not found in the first adapter but is found in the next ones, this adapter ensures that the fetched item is saved to all the adapters where it was previously missing.
The following example shows how to create a chain adapter instance using the fastest and
slowest storage engines, ApcuAdapter
and
FilesystemAdapter
, respectfully:
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(),
]);
When calling this adapter’s prune()
method,
the call is delegated to all its compatible cache adapters. It is safe to mix both adapters
that do and do not implement PruneableInterface
, as
incompatible adapters are silently ignored:
use Symfony\Component\Cache\Adapter\ApcuAdapter;
use Symfony\Component\Cache\Adapter\ChainAdapter;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
$cache = new ChainAdapter([
new ApcuAdapter(), // does NOT implement PruneableInterface
new FilesystemAdapter(), // DOES implement PruneableInterface
]);
// prune will proxy the call to FilesystemAdapter while silently skip ApcuAdapter
$cache->prune();