Chris@0: . Chris@0: */ Chris@0: Chris@0: namespace Doctrine\Common\Cache; Chris@0: Chris@0: use \Memcache; Chris@0: Chris@0: /** Chris@0: * Memcache cache provider. Chris@0: * Chris@0: * @link www.doctrine-project.org Chris@0: * @since 2.0 Chris@0: * @author Benjamin Eberlei Chris@0: * @author Guilherme Blanco Chris@0: * @author Jonathan Wage Chris@0: * @author Roman Borschel Chris@0: * @author David Abdemoulaie Chris@0: */ Chris@0: class MemcacheCache extends CacheProvider Chris@0: { Chris@0: /** Chris@0: * @var Memcache|null Chris@0: */ Chris@0: private $memcache; Chris@0: Chris@0: /** Chris@0: * Sets the memcache instance to use. Chris@0: * Chris@0: * @param Memcache $memcache Chris@0: * Chris@0: * @return void Chris@0: */ Chris@0: public function setMemcache(Memcache $memcache) Chris@0: { Chris@0: $this->memcache = $memcache; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Gets the memcache instance used by the cache. Chris@0: * Chris@0: * @return Memcache|null Chris@0: */ Chris@0: public function getMemcache() Chris@0: { Chris@0: return $this->memcache; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doFetch($id) Chris@0: { Chris@0: return $this->memcache->get($id); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doContains($id) Chris@0: { Chris@0: $flags = null; Chris@0: $this->memcache->get($id, $flags); Chris@0: Chris@0: //if memcache has changed the value of "flags", it means the value exists Chris@0: return ($flags !== null); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doSave($id, $data, $lifeTime = 0) Chris@0: { Chris@0: if ($lifeTime > 30 * 24 * 3600) { Chris@0: $lifeTime = time() + $lifeTime; Chris@0: } Chris@0: return $this->memcache->set($id, $data, 0, (int) $lifeTime); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doDelete($id) Chris@0: { Chris@0: // Memcache::delete() returns false if entry does not exist Chris@0: return $this->memcache->delete($id) || ! $this->doContains($id); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doFlush() Chris@0: { Chris@0: return $this->memcache->flush(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doGetStats() Chris@0: { Chris@0: $stats = $this->memcache->getStats(); Chris@0: return array( Chris@0: Cache::STATS_HITS => $stats['get_hits'], Chris@0: Cache::STATS_MISSES => $stats['get_misses'], Chris@0: Cache::STATS_UPTIME => $stats['uptime'], Chris@0: Cache::STATS_MEMORY_USAGE => $stats['bytes'], Chris@0: Cache::STATS_MEMORY_AVAILABLE => $stats['limit_maxbytes'], Chris@0: ); Chris@0: } Chris@0: }