From ab512540caa334058f6c4c7fe5b4f25e21832de4 Mon Sep 17 00:00:00 2001 From: Romain Neutron Date: Mon, 4 Nov 2013 19:11:36 +0100 Subject: [PATCH] Add cache provider for memcached extension --- lib/Alchemy/Phrasea/Cache/Factory.php | 27 +++++++++++++++++++ .../Tests/Phrasea/Cache/FactoryTest.php | 2 ++ 2 files changed, 29 insertions(+) diff --git a/lib/Alchemy/Phrasea/Cache/Factory.php b/lib/Alchemy/Phrasea/Cache/Factory.php index bbebbd04ea..8e1437880e 100644 --- a/lib/Alchemy/Phrasea/Cache/Factory.php +++ b/lib/Alchemy/Phrasea/Cache/Factory.php @@ -45,6 +45,10 @@ class Factory case 'memcachecache': $cache = $this->createMemcache($options); break; + case 'memcached': + case 'memcachecached': + $cache = $this->createMemcached($options); + break; case 'redis': case 'rediscache': $cache = $this->createRedis($options); @@ -131,6 +135,29 @@ class Factory return $cache; } + private function createMemcached($options) + { + if (!extension_loaded('memcached')) { + throw new RuntimeException('The Memcached cache requires the Memcached extension.'); + } + + $host = isset($options['host']) ? $options['host'] : 'localhost'; + $port = isset($options['port']) ? $options['port'] : 11211; + + $memcached = new \Memcached(); + $memcached->addServer($host, $port); + $memcached->getStats(); + + if (\Memcached::RES_SUCCESS !== $memcached->getResultCode()) { + throw new RuntimeException(sprintf("Memcached instance with host '%s' and port '%s' is not reachable", $host, $port)); + } + + $cache = new MemcachedCache(); + $cache->setMemcached($memcached); + + return $cache; + } + private function createApc($options) { if (!extension_loaded('apc')) { diff --git a/tests/Alchemy/Tests/Phrasea/Cache/FactoryTest.php b/tests/Alchemy/Tests/Phrasea/Cache/FactoryTest.php index 93fd5bb108..cabe7fae2f 100644 --- a/tests/Alchemy/Tests/Phrasea/Cache/FactoryTest.php +++ b/tests/Alchemy/Tests/Phrasea/Cache/FactoryTest.php @@ -28,6 +28,8 @@ class FactoryTest extends \PHPUnit_Framework_TestCase array('arraycache', null, 'Alchemy\Phrasea\Cache\ArrayCache'), array('memcache', 'memcache', 'Alchemy\Phrasea\Cache\MemcacheCache'), array('memcachecache', 'memcache', 'Alchemy\Phrasea\Cache\MemcacheCache'), + array('memcached', 'memcached', 'Alchemy\Phrasea\Cache\MemcachedCache'), + array('memcachecached', 'memcached', 'Alchemy\Phrasea\Cache\MemcachedCache'), array('redis', 'redis', 'Alchemy\Phrasea\Cache\RedisCache'), array('rediscache', 'redis', 'Alchemy\Phrasea\Cache\RedisCache'), array('wincache', 'wincache', 'Alchemy\Phrasea\Cache\WincacheCache'),