Вы можете использовать Zend_Cache . Сервер будет загружать каналы в первый раз, но последующие вызовы будут использовать кеш.
На самом деле, я реализовал то, что вы подробно описали:
private function _loadFeedEntries($url)
{
$cache = $this->_getCacheObj();
$md5 = md5($url);
if ($result = $cache->load("feed_{$md5}")) {
return $result;
}
$entries = array();
try {
$feed = @Zend_Feed::import($url);
foreach ($feed as $entry) {
$entries[] = $entry;
}
} catch (Exception $e) {
// ignore this feed.
}
$cache->save($entries, "feed_{$md5}");
return $entries;
}
private function _getCacheObj()
{
$frontendOptions = array(
'lifetime' => self::CACHE_LIFETIME,
'automatic_serialization' => true
);
$backendOptions = array(
'cache_dir' => self::CACHE_DIR
);
return Zend_Cache::factory(
'Core',
'File',
$frontendOptions,
$backendOptions
);
}
Вы все еще можете сделать cronjob для вызова _loadFeedEntries (), который будет кешировать результат.
Вы можете даже сделать cronjob в своей системе, чтобы переходить на ваш сайт каждые CACHE_LIFETIME секунды, тем самым «поддерживая» кэш обновленным.