aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/memcache/arraycache.php
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2015-04-28 15:39:38 +0200
committerRobin Appelman <icewind@owncloud.com>2015-04-30 14:48:36 +0200
commit29213b6136a4b2f71e5f981e9bc08e3e76128d4e (patch)
tree986bdf2bce27ff1c2b49828625c7f632d15cb865 /lib/private/memcache/arraycache.php
parentd308ec4f0ea54e8cb0c99228a480da8cb7cf30a8 (diff)
downloadnextcloud-server-29213b6136a4b2f71e5f981e9bc08e3e76128d4e.tar.gz
nextcloud-server-29213b6136a4b2f71e5f981e9bc08e3e76128d4e.zip
extends memcache with add, inc and dec
Diffstat (limited to 'lib/private/memcache/arraycache.php')
-rw-r--r--lib/private/memcache/arraycache.php56
1 files changed, 55 insertions, 1 deletions
diff --git a/lib/private/memcache/arraycache.php b/lib/private/memcache/arraycache.php
index 939472dc518..6db920a69a8 100644
--- a/lib/private/memcache/arraycache.php
+++ b/lib/private/memcache/arraycache.php
@@ -22,7 +22,9 @@
namespace OC\Memcache;
-class ArrayCache extends Cache {
+use OCP\IMemcache;
+
+class ArrayCache extends Cache implements IMemcache {
/** @var array Array with the cached data */
protected $cachedData = array();
@@ -77,6 +79,58 @@ class ArrayCache extends Cache {
}
/**
+ * 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) {
+ // since this cache is not shared race conditions aren't an issue
+ 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) {
+ $oldValue = $this->get($key);
+ if (is_int($oldValue)) {
+ $this->set($key, $oldValue + $step);
+ return $oldValue + $step;
+ } else {
+ $success = $this->add($key, $step);
+ return ($success) ? $step : false;
+ }
+ }
+
+ /**
+ * Decrease a stored number
+ *
+ * @param string $key
+ * @param int $step
+ * @return int | bool
+ */
+ public function dec($key, $step = 1) {
+ $oldValue = $this->get($key);
+ if (is_int($oldValue)) {
+ $this->set($key, $oldValue - $step);
+ return $oldValue - $step;
+ } else {
+ return false;
+ }
+ }
+
+ /**
* {@inheritDoc}
*/
static public function isAvailable() {