2013-03-18 60 views
4

我的问题:CakePHP的:缓存与APC仍然创建缓存文件,没有性能优势

我提出的Apache Benchmark进行测试,看是否CakePHP的APC发动机的工作原理。但是,如果我将Cake的缓存配置设置为使用APC引擎,则带有序列化缓存数据的缓存文件仍在tmp文件夹中创建,这使我认为正在使用文件缓存。

我也没有性能好处:使用APC和文件引擎,测试结果是~4秒。如果我在我的控制器中硬编码apc_add()和apc_fetch函数,测试结果会变得更好:约3.5秒。

所以APC正在工作,但蛋糕一些为什么不能使用它。

我的设置:

bootstrap.php中:

/*Cache::config('default', array(
    'engine' => 'File', 
    'duration'=> '+999 days', 
    'prefix' => 'file_', 
));*/ 
Cache::config('default', array(
    'engine' => 'Apc', 
    'duration'=> '+999 days', 
    'prefix' => 'apc_', 
)); 

控制器:

$catalogsLatest = Cache::read('catalogsLatest'); 
if(!$catalogsLatest){ 
$catalogsLatest = $this->Catalog->getCatalogs('latest', 5, array('Upload')); 
Cache::write('catalogsLatest', $catalogsLatest); 
} 

的php.ini:

[APC] 
apc.enabled = 1 
apc.enable_cli = 1 
apc.max_file_size = 64M 

如果我检查缓存::设置( )在缓存ex之前或之后在控制器中ecutuon,我得到这些结果:

Array 
(
    [engine] => Apc 
    [path] => E:\wamp\www\cat\app\tmp\cache\ 
    [prefix] => apc_ 
    [lock] => 1 
    [serialize] => 
    [isWindows] => 1 
    [mask] => 436 
    [duration] => 86313600 
    [probability] => 100 
    [groups] => Array 
     (
     ) 
) 

我使用CakePHP 2.2.4。

+0

首先,我认为这个配置应该放在app/Config/core.php中,而不是放在你的bootstrap.php中。显然配置被识别,所以这不应该是问题。写在app/tmp目录中的缓存文件可能是由CakePHP本身编写的缓存文件,您是否检查过它们的内容?要检查是否有任何内容写入APC,可以使用APC控制面板,该面板可以通过APC附带的apc.php文件访问。不是直接的答案,但也许这有帮助 – thaJeztah 2013-03-18 19:24:18

+1

@thaJeztah只有核心缓存进入core.php。默认的高速缓存配置和其他用户定义的配置在bootstrap.php中。 – ADmad 2013-03-18 20:29:41

+0

@ADMD感谢您的信息。 CakePHP 2.x做了这个改变吗?这个曾经在CakePHP 1.x的core.php中,或者我误解了? – thaJeztah 2013-03-18 20:37:59

回答

0

是的,当然APC缓存会提高你的CakePHP供电应用的性能让我们从我下面的说明检查您的设置,让我知道在这条指令之后做了基准测试,并告诉我结果。 可以使用CakePHP中的APC缓存引擎将整个HTML视图文件缓存到缓存中。 蛋糕的CacheHelper将为你做这项工作。假设你有一个PostsController并且你想要缓存所有与这个控制器相关的视图文件。在这种情况下,首先你必须在控制器中定义下面的代码。

class PostsController extends AppController { 
     public $helpers = array('Cache'); 
    } 

而在你bootstrap.php中文件,你必须添加CacheDispatcher

Configure::write('Dispatcher.filters', array(
     'CacheDispatcher' 
     ) 
    ); 

而现在又在你的PostsController你必须告诉缓存文件。

public $cacheAction = array(
     'view' => 36000, 
     'index' => 48000 
    ); 

这将缓存视图动作10小时,index操作13小时。

让我知道你的apache基准测试工具的测试结果。我认为大部分类似的问题正在讨论另一个线程https://stackoverflow.com/a/18916692/1431786检查出来。

谢谢。