X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FCache%2FMemcachedCacheDriver.php;h=9e9c00f0b89f25f9ffbc943ccce6aa7f4673dec2;hb=5881fa7229a25efd382668e6cd4a3af0f8d3198c;hp=52b6a08cf10642f53fb9ca985d03d7f733580164;hpb=34cea93a8be03690d8515039c61affc9f328a02b;p=friendica.git diff --git a/src/Core/Cache/MemcachedCacheDriver.php b/src/Core/Cache/MemcachedCacheDriver.php index 52b6a08cf1..9e9c00f0b8 100644 --- a/src/Core/Cache/MemcachedCacheDriver.php +++ b/src/Core/Cache/MemcachedCacheDriver.php @@ -4,12 +4,15 @@ namespace Friendica\Core\Cache; use Friendica\Core\Cache; +use Exception; +use Memcached; + /** * Memcached Cache Driver * - * @author Hypolite Petovan + * @author Hypolite Petovan */ -class MemcachedCacheDriver extends AbstractCacheDriver +class MemcachedCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver { use TraitCompareSet; use TraitCompareDelete; @@ -19,18 +22,34 @@ class MemcachedCacheDriver extends AbstractCacheDriver */ private $memcached; + /** + * Due to limitations of the INI format, the expected configuration for Memcached servers is the following: + * array { + * 0 => "hostname, port(, weight)", + * 1 => ... + * } + * + * @param array $memcached_hosts + * @throws \Exception + */ public function __construct(array $memcached_hosts) { if (!class_exists('Memcached', false)) { - throw new \Exception('Memcached class isn\'t available'); + throw new Exception('Memcached class isn\'t available'); } - $this->memcached = new \Memcached(); + $this->memcached = new Memcached(); + + array_walk($memcached_hosts, function (&$value) { + if (is_string($value)) { + $value = array_map('trim', explode(',', $value)); + } + }); $this->memcached->addServers($memcached_hosts); if (count($this->memcached->getServerList()) == 0) { - throw new \Exception('Expected Memcached servers aren\'t available, config:' . var_export($memcached_hosts, true)); + throw new Exception('Expected Memcached servers aren\'t available, config:' . var_export($memcached_hosts, true)); } } @@ -42,7 +61,7 @@ class MemcachedCacheDriver extends AbstractCacheDriver // We fetch with the hostname as key to avoid problems with other applications $value = $this->memcached->get($cachekey); - if ($this->memcached->getResultCode() === \Memcached::RES_SUCCESS) { + if ($this->memcached->getResultCode() === Memcached::RES_SUCCESS) { $return = $value; } @@ -58,7 +77,7 @@ class MemcachedCacheDriver extends AbstractCacheDriver return $this->memcached->set( $cachekey, $value, - time() + $ttl + $ttl ); } else { return $this->memcached->set( @@ -75,9 +94,13 @@ class MemcachedCacheDriver extends AbstractCacheDriver return $this->memcached->delete($cachekey); } - public function clear() + public function clear($outdated = true) { - return true; + if ($outdated) { + return true; + } else { + return $this->memcached->flush(); + } } /**