2013-03-18 98 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檢查出來。

謝謝。