我正在使用 cake 2.1.3,目前有一个页面每秒获得数百次查看,因此我使用缓存以更好地处理负载。问题是,一旦缓存过期,我的服务器资源以及数百个 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,或者可能有一种不同的缓存方式,我没有使用。