<?php namespace Doctrine\Common\Cache; use Traversable; use function array_values; use function count; use function iterator_to_array; /** * Cache provider that allows to easily chain multiple cache providers * * @deprecated Deprecated without replacement in doctrine/cache 1.11. This class will be dropped in 2.0 */ class ChainCache extends CacheProvider { /** @var CacheProvider[] */ private $cacheProviders = []; /** @var int */ private $defaultLifeTimeForDownstreamCacheProviders = 0; /** * @param CacheProvider[] $cacheProviders */ public function __construct($cacheProviders = []) { $this->cacheProviders = $cacheProviders instanceof Traversable ? iterator_to_array($cacheProviders, false) : array_values($cacheProviders); } public function setDefaultLifeTimeForDownstreamCacheProviders(int $defaultLifeTimeForDownstreamCacheProviders): void { $this->defaultLifeTimeForDownstreamCacheProviders = $defaultLifeTimeForDownstreamCacheProviders; } /** * {@inheritDoc} */ public function setNamespace($namespace) { parent::setNamespace($namespace); foreach ($this->cacheProviders as $cacheProvider) { $cacheProvider->setNamespace($namespace); } } /** * {@inheritDoc} */ protected function doFetch($id) { foreach ($this->cacheProviders as $key => $cacheProvider) { if ($cacheProvider->doContains($id)) { $value = $cacheProvider->doFetch($id); // We populate all the previous cache layers (that are assumed to be faster) for ($subKey = $key - 1; $subKey >= 0; $subKey--) { $this->cacheProviders[$subKey]->doSave($id, $value, $this->defaultLifeTimeForDownstreamCacheProviders); } return $value; } } return false; } /** * {@inheritdoc} */ protected function doFetchMultiple(array $keys) { /** @var CacheProvider[] $traversedProviders */ $traversedProviders = []; $keysCount = count($keys); $fetchedValues = []; foreach ($this->cacheProviders as $key => $cacheProvider) { $fetchedValues = $cacheProvider->doFetchMultiple($keys); // We populate all the previous cache layers (that are assumed to be faster) if (count($fetchedValues) === $keysCount) { foreach ($traversedProviders as $previousCacheProvider) { $previousCacheProvider->doSaveMultiple($fetchedValues, $this->defaultLifeTimeForDownstreamCacheProviders); } return $fetchedValues; } $traversedProviders[] = $cacheProvider; } return $fetchedValues; } /** * {@inheritDoc} */ protected function doContains($id) { foreach ($this->cacheProviders as $cacheProvider) { if ($cacheProvider->doContains($id)) { return true; } } return false; } /** * {@inheritDoc} */ protected function doSave($id, $data, $lifeTime = 0) { $stored = true; foreach ($this->cacheProviders as $cacheProvider) { $stored = $cacheProvider->doSave($id, $data, $lifeTime) && $stored; } return $stored; } /** * {@inheritdoc} */ protected function doSaveMultiple(array $keysAndValues, $lifetime = 0) { $stored = true; foreach ($this->cacheProviders as $cacheProvider) { $stored = $cacheProvider->doSaveMultiple($keysAndValues, $lifetime) && $stored; } return $stored; } /** * {@inheritDoc} */ protected function doDelete($id) { $deleted = true; foreach ($this->cacheProviders as $cacheProvider) { $deleted = $cacheProvider->doDelete($id) && $deleted; } return $deleted; } /** * {@inheritdoc} */ protected function doDeleteMultiple(array $keys) { $deleted = true; foreach ($this->cacheProviders as $cacheProvider) { $deleted = $cacheProvider->doDeleteMultiple($keys) && $deleted; } return $deleted; } /** * {@inheritDoc} */ protected function doFlush() { $flushed = true; foreach ($this->cacheProviders as $cacheProvider) { $flushed = $cacheProvider->doFlush() && $flushed; } return $flushed; } /** * {@inheritDoc} */ protected function doGetStats() { // We return all the stats from all adapters $stats = []; foreach ($this->cacheProviders as $cacheProvider) { $stats[] = $cacheProvider->doGetStats(); } return $stats; } }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
Psr6 | Folder | 0755 |
|
|
ApcCache.php | File | 2.33 KB | 0644 |
|
ApcuCache.php | File | 2.22 KB | 0644 |
|
ArrayCache.php | File | 2.17 KB | 0644 |
|
Cache.php | File | 2.73 KB | 0644 |
|
CacheProvider.php | File | 8.28 KB | 0644 |
|
ChainCache.php | File | 4.84 KB | 0644 |
|
ClearableCache.php | File | 501 B | 0644 |
|
CouchbaseBucketCache.php | File | 4.67 KB | 0644 |
|
CouchbaseCache.php | File | 2.27 KB | 0644 |
|
ExtMongoDBCache.php | File | 5.22 KB | 0644 |
|
FileCache.php | File | 8 KB | 0644 |
|
FilesystemCache.php | File | 2.12 KB | 0644 |
|
FlushableCache.php | File | 350 B | 0644 |
|
InvalidCacheId.php | File | 970 B | 0644 |
|
LegacyMongoDBCache.php | File | 4.69 KB | 0644 |
|
MemcacheCache.php | File | 2.16 KB | 0644 |
|
MemcachedCache.php | File | 3.86 KB | 0644 |
|
MongoDBCache.php | File | 3.23 KB | 0644 |
|
MultiDeleteCache.php | File | 466 B | 0644 |
|
MultiGetCache.php | File | 593 B | 0644 |
|
MultiOperationCache.php | File | 251 B | 0644 |
|
MultiPutCache.php | File | 704 B | 0644 |
|
PhpFileCache.php | File | 2.72 KB | 0644 |
|
PredisCache.php | File | 3.35 KB | 0644 |
|
RedisCache.php | File | 4.36 KB | 0644 |
|
RiakCache.php | File | 6.65 KB | 0644 |
|
SQLite3Cache.php | File | 4.66 KB | 0644 |
|
Version.php | File | 211 B | 0644 |
|
VoidCache.php | File | 994 B | 0644 |
|
WinCacheCache.php | File | 2.34 KB | 0644 |
|
XcacheCache.php | File | 2.16 KB | 0644 |
|
ZendDataCache.php | File | 1.32 KB | 0644 |
|