使用CakePhp保存临时数据


Save temporary data with CakePhp

我正在CakePhp中寻找一个解决方案,用于存储和读取临时数据:

我从其他网站读取了一些XML,以便在我的网站中显示一些新闻,但在每次加载页面时,它都会调用其他XML网站。

有没有一种方法(类似memcached)可以将临时数据保存在CakePhp中,以便存储1小时的数据,并读取临时数据以在我的网页中显示它们;然后在更新后1小时(用cron)?

谢谢。

CakePHP缓存似乎是您想要的。

使用哪种缓存(Redis、Memcache等)取决于您。将你的缓存设置为持续一个小时,你就做好了准备。(请阅读上面链接中有关缓存的更多信息)。

如果您使用的是CakePHP 2.5+,则可以使用此处描述的remember方法。

public function newest() {
    $model = $this;
    return Cache::remember('newest_posts', function() use ($model){
        // get your data from whatever source here, and return it
        return $model->getMyData();
    }, 'long');
}

基本上,这只是检查缓存键是否存在,如果不存在,则运行一些代码以便再次填充它。

如果你低于2.5,你可以做同样的基本事情,但没有remember:

public function newest() {
    $result = Cache::read('newest_posts', 'long');
    if (!$result) {
        // get your data from whatever source here, and write it
        Cache::write('newest_posts', $this->getMyData(), 'long');
    }
    return $result;
}

如果你没有安装缓存引擎,或者不想破坏自己的服务器,你可以使用一些公司进行缓存,你只需设置缓存设置即可连接到它们。ObjectRocket(Redis)是我现在所知道的,但我相信有很多。

CakePHP的一大优点是,在这种情况下,无论您选择的缓存类型/位置/配置如何,您的代码都不会更改。