summaryrefslogtreecommitdiffstats
path: root/lib/private/memcache/xcache.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/memcache/xcache.php')
-rw-r--r--lib/private/memcache/xcache.php66
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;
}