server/lib/private/memcache/xcache.php
Andreas Fischer dfeb04a574 Do not use xcache variable cache if cache size is 0.
This is possible because it is possible to only use xcache as an opcode cache
but not a variable cache.
2013-12-17 02:40:16 +01:00

64 lines
1.4 KiB
PHP

<?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 XCache extends Cache {
/**
* entries in XCache gets namespaced to prevent collisions between owncloud instances and users
*/
protected function getNameSpace() {
return $this->prefix;
}
public function get($key) {
return xcache_get($this->getNamespace().$key);
}
public function set($key, $value, $ttl=0) {
if($ttl>0) {
return xcache_set($this->getNamespace().$key, $value, $ttl);
}else{
return xcache_set($this->getNamespace().$key, $value);
}
}
public function hasKey($key) {
return xcache_isset($this->getNamespace().$key);
}
public function remove($key) {
return xcache_unset($this->getNamespace().$key);
}
public function clear($prefix='') {
xcache_unset_by_prefix($this->getNamespace().$prefix);
return true;
}
static public function isAvailable(){
if (!extension_loaded('xcache')) {
return false;
}
if (\OC::$CLI) {
return false;
}
$var_size = (int) ini_get('xcache.var_size');
if (!$var_size) {
return false;
}
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);
}
}