Forse un approccio migliore è quello di memorizzare i risultati e leggere dalla cache, solo colpire il DB quando necessario ...
<?php
$cacheKey = 'myCacheNumber1';
if (($data = Cache::read($cacheKey)) === false) {
$data = $this->Model->find('all');
if ($data) {
Cache::write($cacheKey, $data);
}
}
?>
Il problema di questo è assume la connessione del modello e del database sono disponibili per la tempo in cui la cache non esiste (o è scaduta) e, in caso contrario, avresti comunque gli stessi errori, ma la frequenza verrebbe sicuramente ridotta.
Penso che testare se il DB sia disponibile richiederebbe alcuni trucchi del codice personalizzati poiché il metodo core di connessione presuppone il successo e fallisce pesantemente quando non è disponibile. Probabilmente farei un componente con metodi di connessione PHP standard per controllare se dovresti provare a caricare un modello.
<?php
$cacheKey = 'myCacheNumber1';
if (($data = Cache::read($cacheKey)) === false) {
if ($this->DbTest->check('hostname','username','password')) {
$data = $this->Model->find('all');
if ($data) {
Cache::write($cacheKey, $data);
}
}
}
?>
<?php
// app/controllers/components/db_test.php
class DbTestComponent extends Object {
function check($hostname,$username,$password) {
$result = true;
$link = @mysql_connect($hostname,$username,$password);
if (!$link) {
$result = false;
}
@mysql_close($link);
return $result;
}
}
?>
Hmmm. Avete interruzioni del database così massicce che questo è veramente necessario? Perché? –
database di feed (prezzi stock DB) Pekka – SMSM