X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FCache%2FMemcachedCacheDriver.php;h=9e9c00f0b89f25f9ffbc943ccce6aa7f4673dec2;hb=5881fa7229a25efd382668e6cd4a3af0f8d3198c;hp=819cf71c5c6fba73676137f6d04a359b922d6e09;hpb=749b167fd9be7b02118a3311ed62e5cdbe2d931f;p=friendica.git diff --git a/src/Core/Cache/MemcachedCacheDriver.php b/src/Core/Cache/MemcachedCacheDriver.php index 819cf71c5c..9e9c00f0b8 100644 --- a/src/Core/Cache/MemcachedCacheDriver.php +++ b/src/Core/Cache/MemcachedCacheDriver.php @@ -4,10 +4,13 @@ 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 implements IMemoryCacheDriver { @@ -19,18 +22,34 @@ class MemcachedCacheDriver extends AbstractCacheDriver implements IMemoryCacheDr */ 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 implements IMemoryCacheDr // 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 implements IMemoryCacheDr return $this->memcached->set( $cachekey, $value, - time() + $ttl + $ttl ); } else { return $this->memcached->set( @@ -75,9 +94,13 @@ class MemcachedCacheDriver extends AbstractCacheDriver implements IMemoryCacheDr return $this->memcached->delete($cachekey); } - public function clear() + public function clear($outdated = true) { - return true; + if ($outdated) { + return true; + } else { + return $this->memcached->flush(); + } } /**