From: Joas Schilling Date: Mon, 12 Jan 2015 12:48:07 +0000 (+0100) Subject: Add an array implementation of cache and use it if we are not debugging X-Git-Tag: v8.1.0alpha1~495^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8848b5f067f9b81f68508d2d739f0f951575e5e3;p=nextcloud-server.git Add an array implementation of cache and use it if we are not debugging --- diff --git a/lib/private/memcache/arraycache.php b/lib/private/memcache/arraycache.php new file mode 100644 index 00000000000..9456c0f80c6 --- /dev/null +++ b/lib/private/memcache/arraycache.php @@ -0,0 +1,71 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Memcache; + +class ArrayCache extends Cache { + /** @var array Array with the cached data */ + protected $cachedData = array(); + + /** + * {@inheritDoc} + */ + public function get($key) { + if ($this->hasKey($key)) { + return $this->cachedData[$key]; + } + return null; + } + + /** + * {@inheritDoc} + */ + public function set($key, $value, $ttl = 0) { + $this->cachedData[$key] = $value; + return true; + } + + /** + * {@inheritDoc} + */ + public function hasKey($key) { + return isset($this->cachedData[$key]); + } + + /** + * {@inheritDoc} + */ + public function remove($key) { + unset($this->cachedData[$key]); + return true; + } + + /** + * {@inheritDoc} + */ + public function clear($prefix = '') { + if ($prefix === '') { + $this->cachedData = []; + return true; + } + + foreach ($this->cachedData as $key => $value) { + if (strpos($key, $prefix) === 0) { + $this->remove($key); + } + } + return true; + } + + /** + * {@inheritDoc} + */ + static public function isAvailable() { + return true; + } +} diff --git a/lib/private/memcache/factory.php b/lib/private/memcache/factory.php index 1e663eecfe1..e8a91c52269 100644 --- a/lib/private/memcache/factory.php +++ b/lib/private/memcache/factory.php @@ -42,7 +42,7 @@ class Factory implements ICacheFactory { } elseif (Memcached::isAvailable()) { return new Memcached($prefix); } else { - return new Null($prefix); + return new ArrayCache($prefix); } } diff --git a/tests/lib/memcache/arraycache.php b/tests/lib/memcache/arraycache.php new file mode 100644 index 00000000000..1db673da2a8 --- /dev/null +++ b/tests/lib/memcache/arraycache.php @@ -0,0 +1,17 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace Test\Memcache; + +class ArrayCache extends Cache { + protected function setUp() { + parent::setUp(); + $this->instance = new \OC\Memcache\ArrayCache(''); + } +}