Question

Je travaille sur la mise en place pour la mise en cache mon site, mais je avoir tester difficulté si la mise en cache fonctionne correctement ou non. J'ai la suivante dans mon contrôleur:

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;
}

Cela fonctionne très bien, je peux même vérifier que le cache est trouvé, et si () chèque n'est pas entré après le cache est réglé. Ma confusion est-ce, pourquoi est-il quand je modifier mon cache fichier les modifications ne sont pas dans la vue? Par exemple, mon cache ressemble à ceci:

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";
}

Si je l'ai changé la valeur title à « Certains Titre de l'article Partie 2, » et rafraîchir mon avis, je vois encore l'ancien nom du titre, et les modifications que j'apportées au fichier de cache évanouis.

Est-ce que je fais mal? Comment puis-je vérifier si mes fichiers de cache sont accessibles à la place de ma base de données? Mon contenu du fichier de configuration suit:

$config['default'] = array
(
  'driver'   => 'file',
  'params'   => APPPATH.'cache',
  'lifetime' => 1800,
  'requests' => 1000
);
Était-ce utile?

La solution

L'objet PHP sérialisé impose des contraintes sur les valeurs. Regardez la ligne suivante:

s:5:"title";s:45:"Some Article Title";

Le s:5 signifie que la valeur suivante aura cinq caractères "T-i-t-l-e". Cinq au total. La valeur suivante s:45 devrait avoir quarante-cinq caractères. Vous avez changé le texte de ce qu'il était à "Some Article Title" pour l'affichage, mais l'avait 45 caractères d'original au total.

Ajout d'autres caractères, ou en soustrayant les caractères va rompre la relation entre la longueur de la chaîne de la valeur, et l'int-val lié à elle. Si s:3, votre chaîne doit être trois caractères de long.

Plutôt que d'ajouter / soustraire à / de la valeur, il suffit de changer un caractère couple. Changer "Title" à "Ninja" puis rafraîchir la page.

Autres conseils

Vous souhaitez modifier vos données dans le magasin de données d'origine et de traiter la mise en cache comme une boîte noire.

Si vous en utilisant une base de données, obtenir un bon gestionnaire de base de données afin que vous pouvez facilement modifier les valeurs. J'utilise DbVisualizer ... ne me demandez pas pourquoi.

Lorsque vous utilisez le pilote de cache de fichiers, je supprimer tout sous application / cache afin d'effacer le cache et tester le code de mise en cache.

La seule fois où j'éditer des fichiers de cache, était en train d'écrire si je fait un système de mise en cache pour remplacer le fichier ou les pilotes memcached.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top