Add OC_Cache implementation for APC

This commit is contained in:
Bart Visscher 2012-06-05 23:19:28 +02:00
parent 86961b6445
commit fc56a668ce
3 changed files with 84 additions and 0 deletions

46
lib/cache/apc.php vendored Normal file
View File

@ -0,0 +1,46 @@
<?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 {
/**
* entries in APC gets namespaced to prevent collisions between owncloud instances and users
*/
protected function getNameSpace() {
return OC_Util::getInstanceId().'/'.OC_User::getUser().'/';
}
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(){
$ns = $this->getNamespace();
$cache = apc_cache_info('user');
foreach($cache['cache_list'] as $entry) {
if (strpos($entry['info'], $ns) === 0) {
apc_delete($entry['info']);
}
}
}
}

View File

@ -40,6 +40,8 @@ abstract class Test_Cache extends UnitTestCase {
$this->assertFalse($this->instance->hasKey('not_set'));
$this->assertNull($this->instance->get('not_set'),'Unset value not equal to null');
$this->assertTrue($this->instance->remove('value1'));
}
function testTTL(){

36
tests/lib/cache/apc.php vendored Normal file
View File

@ -0,0 +1,36 @@
<?php
/**
* ownCloud
*
* @author Robin Appelman
* @copyright 2012 Robin Appelman icewind@owncloud.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
class Test_Cache_APC extends Test_Cache {
function skip() {
$this->skipUnless(function_exists('apc_store'));
}
public function setUp(){
$this->instance=new OC_Cache_APC();
}
function testTTL(){
// ttl doesn't work correctly in the same request
// see https://bugs.php.net/bug.php?id=58084
}
}