diff options
author | Georg Ehrke <developer@georgehrke.com> | 2013-07-22 15:30:57 +0200 |
---|---|---|
committer | Georg Ehrke <developer@georgehrke.com> | 2013-07-22 15:30:57 +0200 |
commit | f1e939e1a3c9f63d98bd5ca7ca67568a97ff366f (patch) | |
tree | 14e9096800bb4f005440db1b8510e32ed518c339 /lib/memcache/memcached.php | |
parent | 63791e2d8d323df2717979cc8ecab0c08587ed47 (diff) | |
parent | da892d69ab724354e1b3ee251e540ba306fffe44 (diff) | |
download | nextcloud-server-f1e939e1a3c9f63d98bd5ca7ca67568a97ff366f.tar.gz nextcloud-server-f1e939e1a3c9f63d98bd5ca7ca67568a97ff366f.zip |
Merge branch 'master' into fix_return_value_search_principals
Diffstat (limited to 'lib/memcache/memcached.php')
-rw-r--r-- | lib/memcache/memcached.php | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/lib/memcache/memcached.php b/lib/memcache/memcached.php new file mode 100644 index 00000000000..978e6c2eff1 --- /dev/null +++ b/lib/memcache/memcached.php @@ -0,0 +1,76 @@ +<?php +/** + * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Memcache; + +class Memcached extends Cache { + /** + * @var \Memcached $cache + */ + private static $cache = null; + + public function __construct($prefix = '') { + parent::__construct($prefix); + if (is_null(self::$cache)) { + self::$cache = new \Memcached(); + list($host, $port) = \OC_Config::getValue('memcached_server', array('localhost', 11211)); + self::$cache->addServer($host, $port); + } + } + + /** + * entries in XCache gets namespaced to prevent collisions between owncloud instances and users + */ + protected function getNameSpace() { + return $this->prefix; + } + + public function get($key) { + $result = self::$cache->get($this->getNamespace() . $key); + if ($result === false and self::$cache->getResultCode() == \Memcached::RES_NOTFOUND) { + return null; + } else { + return $result; + } + } + + public function set($key, $value, $ttl = 0) { + if ($ttl > 0) { + return self::$cache->set($this->getNamespace() . $key, $value, $ttl); + } else { + return self::$cache->set($this->getNamespace() . $key, $value); + } + } + + public function hasKey($key) { + self::$cache->get($this->getNamespace() . $key); + return self::$cache->getResultCode() !== \Memcached::RES_NOTFOUND; + } + + public function remove($key) { + return self::$cache->delete($this->getNamespace() . $key); + } + + public function clear($prefix = '') { + $prefix = $this->getNamespace() . $prefix; + $allKeys = self::$cache->getAllKeys(); + $keys = array(); + $prefixLength = strlen($prefix); + foreach ($allKeys as $key) { + if (substr($key, 0, $prefixLength) === $prefix) { + $keys[] = $key; + } + } + self::$cache->deleteMulti($keys); + return true; + } + + static public function isAvailable() { + return extension_loaded('memcached'); + } +} |