diff options
author | Robin Appelman <icewind@owncloud.com> | 2015-04-28 15:39:38 +0200 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2015-04-30 14:48:36 +0200 |
commit | 29213b6136a4b2f71e5f981e9bc08e3e76128d4e (patch) | |
tree | 986bdf2bce27ff1c2b49828625c7f632d15cb865 /lib/private/memcache/arraycache.php | |
parent | d308ec4f0ea54e8cb0c99228a480da8cb7cf30a8 (diff) | |
download | nextcloud-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.php | 56 |
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() { |