Quoi / quand / comment ?
Le premier reflex que l'on a quand on commence a utiliser le cache (c'est en tout cas celui que j'ai eu et celui que j'observe le plus chez les jeunes developeurs), c'est de mettre en cache les résultats de grosses requêtes pour un durée prédéterminée. Ceci va effectivement permettre d'accroître les performances d'un site, mais ce sera au détriement de la cohérance des données qui ne peut être conservée sans une gestion globale du cache. Le cache doit donc, selon moi, s'appliquer à tous les objets de votre application dés le début. Vos objets intégreront probablement tous les méthodes suivantes :
- une méthode pou charger l'objet depuis la base de donnée.
- une méthode de sauvegarde en base pour la création et/ou la modification.
- une méthode de suppression.
Maintenant que tous nos objets sont en cache, on peut s'attaquer aux collections d'objets, ces fameuses méthodes search, getAll, loadCollection que nous avons tous déjà implémentées plus ou moins brillament.
Quelles clés de cache utiliser ?
Les clés de cache des collections doivent être basées sur les paramètres que va recevoir la méthode, ceci va permettre de construire les clés dynamiquement et de gérer toutes les différentes collections pouvant être construites a partir d'une même méthode.
Comment gérer l'expiration ?
Choisir de mettre en cache des collections pour une durée définie, est certe efficace dans un premier temps, mais va vite devenir une contrainte forcant parfois à vider tous le cache pour mettre à jour une seule liste. Pour ne jamais se retrouver dans une telle situation, la seule solution est de stocker la totalité des éléments en cache pour une durée infinie, et de spécifier à chaque fois que l'on stocke une collection en cache, de quoi elle dépend et quand elle devra être vidée. En pratiqe cela revient à associer les clés de cache à d'autres clés ou plus généralement à des objets pour dire par exemple que lors de la suppression d'un objet X, il faut vider le cache de la ou des listes d'objets X. Cette association de clés pourra elle aussi être stoker en cache.
Et si on ne peut pas gérer de cache infini ?
C'est que la modélisation est à revoir ! Mais soit, on a tous a gérer un existant plus ou moins lourd, et on ne peut pas tout réécrire. Dans ce cas, je pense qu'il faut préférer des durée de cache plutôt courte afin de ne pas se retrouver dans une situation vous forcant à vider tous le cache sous peines d'avoir un site en "vrac" pendant plusieurs heures. Et, quand c'est possible, par exemple dans le cas ou une cron va mettre à jour vos données tous les jours à une heure données, vous pouvez estimer la durée de validité de vos données et donc la durée du cache.
Il y a surrement d'autres solutions, lesquels utilisez vous ?
on sens la pratique derrière ;-)
RépondreSupprimersinon s/surrement/surement ;) et donc il faut s'abonner à ton twit pour savoir quand tu viens à paris ? ;-p
les 9 et 10 novembre pour le Forum PHP
RépondreSupprimer