CakePHP:使用APC进行缓存仍然会创建缓存文件,没有性能优势

时间:2013-03-18 17:02:27

标签: cakephp caching apc

我的问题:

我正在进行Apache Benchmark测试,看看CakePHP APC引擎是否有效。但是,如果我将Cake的缓存配置设置为使用APC引擎,则仍会在tmp文件夹中创建具有序列化缓存数据的缓存文件,这使我认为正在使用文件缓存。

我也没有获得任何性能优势:使用APC和File引擎,测试结果约为4秒。如果我在我的控制器中硬编码普通的apc_add()和apc_fetch函数,测试结果会更好:~3.5秒。

所以APC正在运作,但Cake为什么不能使用它。

我的设置:

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

如果我在缓存执行之前或之后检查控制器中的Cache :: settings(),我会得到以下结果:

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。

1 个答案:

答案 0 :(得分:0)

是的,当然APC缓存会提高你的cakephp应用程序性能所以让我们按照以下说明检查你的设置,并在按照说明进行基准测试后告诉我并告诉我结果。 您可以使用CakePHP中的APC缓存引擎将整个HTML视图文件缓存到缓存中。 Cake的 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个小时,将索引操作缓存13个小时。

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

感谢。