diff options
Diffstat (limited to 'lib/private/memcache/xcache.php')
-rw-r--r-- | lib/private/memcache/xcache.php | 66 |
1 files changed, 53 insertions, 13 deletions
diff --git a/lib/private/memcache/xcache.php b/lib/private/memcache/xcache.php index 33cea23e62b..48b0bd8a289 100644 --- a/lib/private/memcache/xcache.php +++ b/lib/private/memcache/xcache.php @@ -24,12 +24,13 @@ */ namespace OC\Memcache; +use OCP\IMemcache; /** * See http://xcache.lighttpd.net/wiki/XcacheApi for provided constants and * functions etc. */ -class XCache extends Cache { +class XCache extends Cache implements IMemcache { /** * entries in XCache gets namespaced to prevent collisions between ownCloud instances and users */ @@ -38,28 +39,28 @@ class XCache extends Cache { } public function get($key) { - return xcache_get($this->getNamespace().$key); + return xcache_get($this->getNamespace() . $key); } - public function set($key, $value, $ttl=0) { - if($ttl>0) { - return xcache_set($this->getNamespace().$key, $value, $ttl); - }else{ - return xcache_set($this->getNamespace().$key, $value); + public function set($key, $value, $ttl = 0) { + if ($ttl > 0) { + return xcache_set($this->getNamespace() . $key, $value, $ttl); + } else { + return xcache_set($this->getNamespace() . $key, $value); } } public function hasKey($key) { - return xcache_isset($this->getNamespace().$key); + return xcache_isset($this->getNamespace() . $key); } public function remove($key) { - return xcache_unset($this->getNamespace().$key); + return xcache_unset($this->getNamespace() . $key); } - public function clear($prefix='') { + public function clear($prefix = '') { if (function_exists('xcache_unset_by_prefix')) { - return xcache_unset_by_prefix($this->getNamespace().$prefix); + return xcache_unset_by_prefix($this->getNamespace() . $prefix); } else { // Since we can not clear by prefix, we just clear the whole cache. xcache_clear_cache(\XC_TYPE_VAR, 0); @@ -67,7 +68,46 @@ class XCache extends Cache { return true; } - static public function isAvailable(){ + /** + * Set a value in the cache if it's not already stored + * + * @param string $key + * @param mixed $value + * @param int $ttl Time To Live in seconds. Defaults to 60*60*24 + * @return bool + */ + public function add($key, $value, $ttl = 0) { + if ($this->hasKey($key)) { + return false; + } else { + return $this->set($key, $value, $ttl); + } + } + + /** + * Increase a stored number + * + * @param string $key + * @param int $step + * @return int | bool + */ + public function inc($key, $step = 1) { + $this->add($key, 0); + return xcache_inc($this->getPrefix() . $key, $step); + } + + /** + * Decrease a stored number + * + * @param string $key + * @param int $step + * @return int | bool + */ + public function dec($key, $step = 1) { + return xcache_dec($this->getPrefix() . $key, $step); + } + + static public function isAvailable() { if (!extension_loaded('xcache')) { return false; } @@ -80,7 +120,7 @@ class XCache extends Cache { // AND administration functions are password-protected. return false; } - $var_size = (int) ini_get('xcache.var_size'); + $var_size = (int)ini_get('xcache.var_size'); if (!$var_size) { return false; } |