diff options
Diffstat (limited to 'lib/cache/broker.php')
-rw-r--r-- | lib/cache/broker.php | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/cache/broker.php b/lib/cache/broker.php new file mode 100644 index 00000000000..62a7cd96d15 --- /dev/null +++ b/lib/cache/broker.php @@ -0,0 +1,55 @@ +<?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_Broker { + protected $fast_cache; + protected $slow_cache; + + public function __construct($fast_cache, $slow_cache) { + $this->fast_cache = $fast_cache; + $this->slow_cache = $slow_cache; + } + + public function get($key) { + if ($r = $this->fast_cache->get($key)) { + return $r; + } + return $this->slow_cache->get($key); + } + + public function set($key, $value, $ttl=0) { + $set_slow = strlen($value) > 8192; + if ($set_slow) { + if ($this->fast_cache->hasKey($key)) { + $this->fast_cache->remove($key); + } + $this->slow_cache->set($key, $value, $ttl); + } else { + $this->fast_cache->set($key, $value, $ttl); + } + } + + public function hasKey($key) { + if ($this->fast_cache->hasKey($key)) { + return true; + } + return $this->slow_cache->hasKey($key); + } + + public function remove($key) { + if ($this->fast_cache->remove($key)) { + return true; + } + return $this->slow_cache->remove($key); + } + + public function clear(){ + $this->fast_cache->clear(); + $this->slow_cache->clear(); + } +} |