Kohana, Editing cache non riflette in vista?
-
13-09-2019 - |
Domanda
Sto lavorando sulla creazione di caching per il mio sito, ma sto avendo difficoltà a testare se il caching funziona correttamente o meno. Ho il seguente nel mio controller:
public function read($id, $slug = null)
{
$this->cache = Cache::instance();
$story = $this->cache->get("story".$id);
if (!$story) {
$story_model = new Story_Model;
$story = $story_model->get_story($id);
if (!$story) throw new Kohana_404_Exception();
$this->cache->set("story".$id, $story);
}
$this->template->content = new View('story');
$this->template->title = htmlspecialchars($story->title);
$this->template->content->story = $story;
}
Questo funziona bene, posso anche verificare che la cache viene trovata, e non viene inserito il controllo se () dopo la cache è impostato. La mia confusione è questa, perché è quando modifico la cache file le modifiche non vengono riflesse nella vista? Per esempio, la cache è simile al seguente:
O:8:"stdClass":11:{
s:2:"id";s:3:"636";
s:5:"title";s:45:"Some Article Title";
s:4:"link";s:50:"http://www.somesite.com";
s:8:"category";s:2:"12";
s:4:"user";s:1:"5";
s:4:"slug";s:45:"some-article-title";
s:7:"pubdate";s:19:"2009-08-05 03:57:50";
s:6:"sticky";s:1:"0";
s:7:"summary";N;
s:13:"categorytitle";s:13:"International";
s:8:"username";s:7:"usernameHere";
}
Se ho cambiato il valore title
a "Some Titolo articolo Parte 2," e rinfresco mio punto di vista, vedo ancora il vecchio nome titolo, ed i cambiamenti che ho fatto per il file di cache svaniscono.
Lo sto facendo di sbagliato? Come posso verificare se i miei file cache sono in corso l'accesso al posto di mio database? Il mio file di configurazione seguono:
$config['default'] = array
(
'driver' => 'file',
'params' => APPPATH.'cache',
'lifetime' => 1800,
'requests' => 1000
);
Soluzione
L'oggetto PHP serializzato pone vincoli sui valori. Guardate la seguente riga:
s:5:"title";s:45:"Some Article Title";
Il s:5
significa il seguente valore avrà cinque caratteri "T-i-t-l-e"
. Cinque totale. Il valore successivo s:45
dovrebbe avere quarantacinque caratteri. È cambiato il testo da qualunque cosa fosse per "Some Article Title"
per la pubblicazione qui, ma l'originale ha 45 caratteri in essa totale.
L'aggiunta di ulteriori caratteri, o sottraendo caratteri sta per rompere il rapporto tra la lunghezza di stringa del valore, e il int-val legato ad esso. Se s:3
, la stringa dovrebbe essere lungo tre caratteri.
Invece di aggiungere / sottrarre al / dal valore, basta cambiare un paio di caratteri. Cambiare "Title"
a "Ninja"
e quindi aggiornare la pagina.
Altri suggerimenti
Ti consigliamo di modificare i dati nell'archivio dati originali e trattare il caching come una scatola nera.
Se si utilizza un database, ottenere un buon gestore di database in modo da poter facilmente modificare i valori. Io uso dbvisualizer ... non chiedetemi perché.
Quando si utilizza il driver di cache dei file, io cancellare tutto sotto il controllo / cache al fine di cancellare la cache e testare il codice nella cache.
L'unica volta che avrei modificare i file di cache, era se mi è stato effettivamente scrivendo un sistema di caching per sostituire il file oi driver memcached.