From 8848b5f067f9b81f68508d2d739f0f951575e5e3 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 12 Jan 2015 13:48:07 +0100 Subject: [PATCH] Add an array implementation of cache and use it if we are not debugging --- lib/private/memcache/arraycache.php | 71 +++++++++++++++++++++++++++++ lib/private/memcache/factory.php | 2 +- tests/lib/memcache/arraycache.php | 17 +++++++ 3 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 lib/private/memcache/arraycache.php create mode 100644 tests/lib/memcache/arraycache.php 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(''); + } +} -- 2.39.5