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
);
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top