Chris@0: . Chris@0: */ Chris@0: Chris@0: namespace Doctrine\Common\Cache; Chris@0: Chris@0: use \Memcached; Chris@0: Chris@0: /** Chris@0: * Memcached cache provider. Chris@0: * Chris@0: * @link www.doctrine-project.org Chris@0: * @since 2.2 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 MemcachedCache extends CacheProvider Chris@0: { Chris@0: /** Chris@0: * @var Memcached|null Chris@0: */ Chris@0: private $memcached; Chris@0: Chris@0: /** Chris@0: * Sets the memcache instance to use. Chris@0: * Chris@0: * @param Memcached $memcached Chris@0: * Chris@0: * @return void Chris@0: */ Chris@0: public function setMemcached(Memcached $memcached) Chris@0: { Chris@0: $this->memcached = $memcached; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Gets the memcached instance used by the cache. Chris@0: * Chris@0: * @return Memcached|null Chris@0: */ Chris@0: public function getMemcached() Chris@0: { Chris@0: return $this->memcached; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doFetch($id) Chris@0: { Chris@0: return $this->memcached->get($id); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doFetchMultiple(array $keys) Chris@0: { Chris@0: return $this->memcached->getMulti($keys) ?: []; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doSaveMultiple(array $keysAndValues, $lifetime = 0) Chris@0: { Chris@0: if ($lifetime > 30 * 24 * 3600) { Chris@0: $lifetime = time() + $lifetime; Chris@0: } Chris@0: Chris@0: return $this->memcached->setMulti($keysAndValues, $lifetime); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doContains($id) Chris@0: { Chris@12: $this->memcached->get($id); Chris@12: Chris@12: return $this->memcached->getResultCode() === Memcached::RES_SUCCESS; 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->memcached->set($id, $data, (int) $lifeTime); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doDelete($id) Chris@0: { Chris@0: return $this->memcached->delete($id) Chris@0: || $this->memcached->getResultCode() === Memcached::RES_NOTFOUND; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doFlush() Chris@0: { Chris@0: return $this->memcached->flush(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doGetStats() Chris@0: { Chris@0: $stats = $this->memcached->getStats(); Chris@0: $servers = $this->memcached->getServerList(); Chris@0: $key = $servers[0]['host'] . ':' . $servers[0]['port']; Chris@0: $stats = $stats[$key]; 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: }