aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2013-03-17 16:00:39 +0100
committerRobin Appelman <icewind@owncloud.com>2013-03-17 16:00:39 +0100
commit80a3f8d066b7deffe70a232ca956746db02db138 (patch)
tree2822d380f9935d40406f45306dac42c4f8a222fb /lib
parent7f1ff3e9e1253dd6c3be658d139db1c87104be3c (diff)
downloadnextcloud-server-80a3f8d066b7deffe70a232ca956746db02db138.tar.gz
nextcloud-server-80a3f8d066b7deffe70a232ca956746db02db138.zip
Seperate memory based cache from OC_Cache
Diffstat (limited to 'lib')
-rw-r--r--lib/cache.php67
-rw-r--r--lib/cache/apc.php64
-rw-r--r--lib/memcache/apc.php76
-rw-r--r--lib/memcache/cache.php69
-rw-r--r--lib/memcache/xcache.php (renamed from lib/cache/xcache.php)31
5 files changed, 175 insertions, 132 deletions
diff --git a/lib/cache.php b/lib/cache.php
index bc74ed83f8b..48b9964ba9d 100644
--- a/lib/cache.php
+++ b/lib/cache.php
@@ -15,41 +15,14 @@ class OC_Cache {
* @var OC_Cache $global_cache
*/
static protected $global_cache;
- /**
- * @var OC_Cache $global_cache_fast
- */
- static protected $global_cache_fast;
- /**
- * @var OC_Cache $user_cache_fast
- */
- static protected $user_cache_fast;
- static protected $isFast=null;
/**
* get the global cache
* @return OC_Cache
*/
- static public function getGlobalCache($fast=false) {
+ static public function getGlobalCache() {
if (!self::$global_cache) {
- self::$global_cache_fast = null;
- if (!self::$global_cache_fast && function_exists('xcache_set')) {
- self::$global_cache_fast = new OC_Cache_XCache(true);
- }
- if (!self::$global_cache_fast && function_exists('apc_store')) {
- self::$global_cache_fast = new OC_Cache_APC(true);
- }
-
self::$global_cache = new OC_Cache_FileGlobal();
- if (self::$global_cache_fast) {
- self::$global_cache = new OC_Cache_Broker(self::$global_cache_fast, self::$global_cache);
- }
- }
- if($fast) {
- if(self::$global_cache_fast) {
- return self::$global_cache_fast;
- }else{
- return false;
- }
}
return self::$global_cache;
}
@@ -58,34 +31,16 @@ class OC_Cache {
* get the user cache
* @return OC_Cache
*/
- static public function getUserCache($fast=false) {
+ static public function getUserCache() {
if (!self::$user_cache) {
- self::$user_cache_fast = null;
- if (!self::$user_cache_fast && function_exists('xcache_set')) {
- self::$user_cache_fast = new OC_Cache_XCache();
- }
- if (!self::$user_cache_fast && function_exists('apc_store')) {
- self::$user_cache_fast = new OC_Cache_APC();
- }
-
self::$user_cache = new OC_Cache_File();
- if (self::$user_cache_fast) {
- self::$user_cache = new OC_Cache_Broker(self::$user_cache_fast, self::$user_cache);
- }
- }
-
- if($fast) {
- if(self::$user_cache_fast) {
- return self::$user_cache_fast;
- }else{
- return false;
- }
}
return self::$user_cache;
}
/**
* get a value from the user cache
+ * @param string $key
* @return mixed
*/
static public function get($key) {
@@ -95,6 +50,9 @@ class OC_Cache {
/**
* set a value in the user cache
+ * @param string $key
+ * @param mixed $value
+ * @param int $ttl
* @return bool
*/
static public function set($key, $value, $ttl=0) {
@@ -107,6 +65,7 @@ class OC_Cache {
/**
* check if a value is set in the user cache
+ * @param string $key
* @return bool
*/
static public function hasKey($key) {
@@ -116,6 +75,7 @@ class OC_Cache {
/**
* remove an item from the user cache
+ * @param string $key
* @return bool
*/
static public function remove($key) {
@@ -133,17 +93,6 @@ class OC_Cache {
return $user_cache->clear($prefix);
}
- /**
- * check if a fast memory based cache is available
- * @return true
- */
- static public function isFast() {
- if(is_null(self::$isFast)) {
- self::$isFast=function_exists('xcache_set') || function_exists('apc_store');
- }
- return self::$isFast;
- }
-
static public function generateCacheKeyFromFiles($files) {
$key = '';
sort($files);
diff --git a/lib/cache/apc.php b/lib/cache/apc.php
deleted file mode 100644
index 895d307ea26..00000000000
--- a/lib/cache/apc.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-/**
- * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-class OC_Cache_APC {
- protected $prefix;
-
- public function __construct($global = false) {
- $this->prefix = OC_Util::getInstanceId().'/';
- if (!$global) {
- $this->prefix .= OC_User::getUser().'/';
- }
- }
-
- /**
- * entries in APC gets namespaced to prevent collisions between owncloud instances and users
- */
- protected function getNameSpace() {
- return $this->prefix;
- }
-
- public function get($key) {
- $result = apc_fetch($this->getNamespace().$key, $success);
- if (!$success) {
- return null;
- }
- return $result;
- }
-
- public function set($key, $value, $ttl=0) {
- return apc_store($this->getNamespace().$key, $value, $ttl);
- }
-
- public function hasKey($key) {
- return apc_exists($this->getNamespace().$key);
- }
-
- public function remove($key) {
- return apc_delete($this->getNamespace().$key);
- }
-
- public function clear($prefix='') {
- $ns = $this->getNamespace().$prefix;
- $cache = apc_cache_info('user');
- foreach($cache['cache_list'] as $entry) {
- if (strpos($entry['info'], $ns) === 0) {
- apc_delete($entry['info']);
- }
- }
- return true;
- }
-}
-if(!function_exists('apc_exists')) {
- function apc_exists($keys)
- {
- $result=false;
- apc_fetch($keys, $result);
- return $result;
- }
-}
diff --git a/lib/memcache/apc.php b/lib/memcache/apc.php
new file mode 100644
index 00000000000..b3bb68223b4
--- /dev/null
+++ b/lib/memcache/apc.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Memcache;
+
+class APC extends Cache {
+ protected $prefix;
+
+ public function __construct($global = false) {
+ $this->prefix = \OC_Util::getInstanceId() . '/';
+ if (!$global) {
+ $this->prefix .= \OC_User::getUser() . '/';
+ }
+ }
+
+ /**
+ * entries in APC gets namespaced to prevent collisions between owncloud instances and users
+ */
+ protected function getNameSpace() {
+ return $this->prefix;
+ }
+
+ public function get($key) {
+ $result = apc_fetch($this->getNamespace() . $key, $success);
+ if (!$success) {
+ return null;
+ }
+ return $result;
+ }
+
+ public function set($key, $value, $ttl = 0) {
+ return apc_store($this->getNamespace() . $key, $value, $ttl);
+ }
+
+ public function hasKey($key) {
+ return apc_exists($this->getNamespace() . $key);
+ }
+
+ public function remove($key) {
+ return apc_delete($this->getNamespace() . $key);
+ }
+
+ public function clear($prefix = '') {
+ $ns = $this->getNamespace() . $prefix;
+ $cache = apc_cache_info('user');
+ foreach ($cache['cache_list'] as $entry) {
+ if (strpos($entry['info'], $ns) === 0) {
+ apc_delete($entry['info']);
+ }
+ }
+ return true;
+ }
+
+ static public function isAvailable() {
+ if (!extension_loaded('apc')) {
+ return false;
+ } elseif (!ini_get('apc.enable_cli') && \OC::$CLI) {
+ return false;
+ }else{
+ return true;
+ }
+ }
+}
+
+if (!function_exists('apc_exists')) {
+ function apc_exists($keys) {
+ $result = false;
+ apc_fetch($keys, $result);
+ return $result;
+ }
+}
diff --git a/lib/memcache/cache.php b/lib/memcache/cache.php
new file mode 100644
index 00000000000..d77ea27933f
--- /dev/null
+++ b/lib/memcache/cache.php
@@ -0,0 +1,69 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Memcache;
+
+abstract class Cache {
+ /**
+ * get a cache instance
+ *
+ * @param bool $global
+ * @return Cache
+ */
+ static function create($global = false) {
+ if (XCache::isAvailable()) {
+ return new XCache($global);
+ } elseif (APC::isAvailable()) {
+ return new APC($global);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @param bool $global
+ */
+ abstract public function __construct($global);
+
+ /**
+ * @param string $key
+ * @return mixed
+ */
+ abstract public function get($key);
+
+ /**
+ * @param string $key
+ * @param mixed $value
+ * @param int $ttl
+ * @return mixed
+ */
+ abstract public function set($key, $value, $ttl = 0);
+
+ /**
+ * @param string $key
+ * @return mixed
+ */
+ abstract public function hasKey($key);
+
+ /**
+ * @param string $key
+ * @return mixed
+ */
+ abstract public function remove($key);
+
+ /**
+ * @param string $prefix
+ * @return mixed
+ */
+ abstract public function clear($prefix = '');
+
+ /**
+ * @return bool
+ */
+ //static public function isAvailable();
+}
diff --git a/lib/cache/xcache.php b/lib/memcache/xcache.php
index 9f380f870b9..0ee34c667d3 100644
--- a/lib/cache/xcache.php
+++ b/lib/memcache/xcache.php
@@ -6,13 +6,15 @@
* See the COPYING-README file.
*/
-class OC_Cache_XCache {
+namespace OC\Memcache;
+
+class XCache extends Cache {
protected $prefix;
public function __construct($global = false) {
- $this->prefix = OC_Util::getInstanceId().'/';
+ $this->prefix = \OC_Util::getInstanceId().'/';
if (!$global) {
- $this->prefix .= OC_User::getUser().'/';
+ $this->prefix .= \OC_User::getUser().'/';
}
}
@@ -44,13 +46,24 @@ class OC_Cache_XCache {
}
public function clear($prefix='') {
- if(!function_exists('xcache_unset_by_prefix')) {
- function xcache_unset_by_prefix($prefix) {
- // Since we can't clear targetted cache, we'll clear all. :(
- xcache_clear_cache(XC_TYPE_VAR, 0);
- }
- }
xcache_unset_by_prefix($this->getNamespace().$prefix);
return true;
}
+
+ static public function isAvailable(){
+ if (!extension_loaded('xcache')) {
+ return false;
+ } elseif (\OC::$CLI) {
+ return false;
+ }else{
+ return true;
+ }
+ }
+}
+
+if(!function_exists('xcache_unset_by_prefix')) {
+ function xcache_unset_by_prefix($prefix) {
+ // Since we can't clear targetted cache, we'll clear all. :(
+ xcache_clear_cache(\XC_TYPE_VAR, 0);
+ }
}