Viewing file: ChainCache.php (3.7 KB) -rwxrwxr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /* * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * This software consists of voluntary contributions made by many individuals * and is licensed under the MIT license. For more information, see * <http://www.doctrine-project.org>. */
namespace Doctrine\Common\Cache;
/** * Cache provider that allows to easily chain multiple cache providers * * @author Michaƫl Gallego <mic.gallego@gmail.com> */ class ChainCache extends CacheProvider { /** * @var CacheProvider[] */ private $cacheProviders = array();
/** * Constructor * * @param CacheProvider[] $cacheProviders */ public function __construct($cacheProviders = array()) { $this->cacheProviders = $cacheProviders; }
/** * {@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); }
return $value; } }
return false; }
/** * {@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 doDelete($id) { $deleted = true;
foreach ($this->cacheProviders as $cacheProvider) { $deleted = $cacheProvider->doDelete($id) && $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 = array();
foreach ($this->cacheProviders as $cacheProvider) { $stats[] = $cacheProvider->doGetStats(); }
return $stats; } }
|