私はCake2.1.3を使用していて、現在1秒あたり数百回のビューを取得しているページがあるため、負荷をより適切に処理するためにキャッシュを利用しました。問題は、キャッシュの有効期限が切れると、サーバーリソースと数百のmysql接続が急増することです。
私はこれを間違った方法で行っているのか、現在の方法ではなくcronを実行してページをキャッシュする必要があるのか、それとも私が考えていない別の手法があるのか疑問に思っています。
これが私のコントローラーでの私の関数の様子です:
public function index() {
$this->layout = 'ajax';
if (isset($this->params['url']['callback'])) {
$callback = $this->params['url']['callback'];
}else{
$callback = 'callback';
}
$this->set('callback',$callback);
$today = date("Y-m-d");
$end_date = strtotime ('+1 day' , strtotime($today)) ;
$end_date = date ( 'Y-m-d' , $end_date);
$start_date = strtotime ('-1 day' , strtotime($today)) ;
$start_date = date ( 'Y-m-d' , $start_date);
$total = Cache::read('popular_stories', 'short');
if (!$total) {
$total = $this->TrackStoryView->find('all', array(
'fields' => array('COUNT(story_id) AS theCount', 'headline', 'url'),
'conditions' => array('date BETWEEN ? AND ?' => array($start_date,$end_date)),
'group' => 'story_id',
'order' => array('theCount DESC'),
'limit' => 20,
));
Cache::write('popular_stories', $total, 'short');
}
$this->set('story', $total);
}
bootstrap.phpファイルでのキャッシュ構成は次のようになります。
Cache::config('short', array(
'engine' => 'File',
'duration' => '+60 minutes',
'path' => CACHE,
'prefix' => 'cake_short_'
));
これは私のビューファイルにあるものです:
<?php
echo $callback . '('.json_encode($story).')';
?>
キャッシュされたファイルの有効期限が切れると、最初の人がアクセスするとすぐに、新しいキャッシュされたファイルが作成され、すべての人に提供されることを期待していましたが、毎秒何百人もの人がファイルにアクセスしているため、この方法はそうではないようです。私のために働いていません、そして多分私は代わりに何らかの方法でビュービューをcronにキャッシュするべきです、あるいは多分私が利用していないキャッシュする別の方法があります。