Lors de la génération de clés de cache pour le contenu rendu dans les applications Web, vous devez prendre en compte toutes les variables susceptibles de modifier le résultat.
Dans les environnements dynamiques comme les rails, ceux-ci peuvent être définis dans différents endroits: le contrôleur, un modèle, la session ou l'environnement du serveur. Et ils peuvent être référencés dans le modèle, dans un modèle rendu dans le modèle ou un assistant. Pouvez-vous imaginer un moyen de générer automatiquement une liste de variables qui contribuent au contenu du modèle rendu, peut-être en utilisant ParseTree?Est-il possible de dériver automatiquement les composants d'une clé cache dans des rails?
2
A
Répondre
0
J'utilise une « clé de fraîcheur » dans mes clés du cache, sans doute appris de cet article: http://blog.leetsoft.com/2007/5/22/the-secret-to-memcached
Cela me permet d'annuler facilement tout cache lié à une ressource, quelle que soit l'URL, malgré le fait que memcached ne fournit pas de fonction pour l'itération des clés existantes.
Je génère généralement le mien en utilisant une combinaison de request.url et de l'identifiant utilisateur connecté et de la touche freshness, par ex.
#
# return the freshness_key for caching this particular collection
def get_freshness_key_for(collection_name)
Rails.cache.fetch("#{self.id}:#{collection_name}") { "#{self.send(collection_name).maximum(:updated_at).to_i}:#{Time.now.to_i}" }
end
#
# set the freshness_key for caching this particular collection;
# typically called after_save from an Observer for this collection
#
def set_freshness_key_for(collection_name)
Rails.cache.write("#{self.id}:#{collection_name}", "#{self.send(collection_name).maximum(:updated_at).to_i}:#{Time.now.to_i}")
end
# returns the cache_key for this client, the desired collection, and the
# current url with the latest freshness_key
#
# the url is hashed so as not to overrun memcached's key length limit
def cache_key_for(collection_name, request_url)
freshness_key = self.get_freshness_key_for(collection_name)
"#{self.id}:#{Digest::MD5.hexdigest(request_url)}:#{freshness_key}"
end
Je vais l'utiliser dans un contrôleur:
@posts_cache_key = cache_key_for(:posts)
@posts = cache(@posts_cache_key) do
Post.paginate(
:page => params[:page],
:per_page => params[:pp]
)
end
... et dans la vue:
<% cache(:key => "#{@posts_cache_key}:posts_list_fragment") do -%>
... html here ...
<% end -%>
En général, je vais avoir un observateur pour le modèle de collection:
class PostObserver < ActiveRecord::Observer
def after_save(post)
post.client.set_freshness_key_for(:posts)
end
def after_destroy(post)
post.client.set_freshness_key_for(:posts)
end
end
Espérons que cela aide
Questions connexes
- 1. Composants CMS dans les rails
- 2. génération de clé de cache
- 3. Composants de mise en cache Smarty
- 4. Est-il possible d'exécuter des composants OSGi dans Weblogic 10.3?
- 5. Rails - le cache des fragments n'expire pas
- 6. Dériver une classe avec des membres privés
- 7. Possible de faire du cache Flash de gros actifs sonores?
- 8. Répertoire pour stocker les fichiers mis en cache dans Rails?
- 9. Symfony: Est-il possible de définir SetTemplate pour les composants?
- 10. MySQL indexe-t-il automatiquement les colonnes de clé étrangère?
- 11. Clé primaire native ou générée automatiquement?
- 12. Est-il possible pour jQuery de lire les paramètres CSS AVANT de créer des composants html?
- 13. Possible d'utiliser stylesheet.css.erb dans Rails?
- 14. dériver problème sur C++
- 15. Est-il possible de déplacer des composants autour de l'écran en utilisant les apis Android standard?
- 16. Forcer des rails pour créer des fichiers cache d'actifs
- 17. Créer automatiquement la prochaine clé dans le dictionnaire python
- 18. Désactivation de l'insertion de clé json dans Rails
- 19. Analyse de l'URL dans les composants
- 20. intervalle rails mise en cache
- 21. URL de ressources sans horodatage de cache dans Rails
- 22. Suppression du contournement du cache des fichiers statiques dans les rails
- 23. Rails ActiveRecord: automatiquement Alias / Append Suffixe?
- 24. Est-il possible de libérer automatiquement un verrou dans PostgreSQL?
- 25. Mise en cache de page par domaine dans Rails
- 26. Détection automatique des composants à l'aide des annotations de ressort
- 27. Rails DB Requêtes et Mise en cache les meilleures pratiques
- 28. Est-ce possible de mettre UIWebView en cache dans l'iPhone?
- 29. Compiler automatiquement les requêtes Linq
- 30. Comment utiliser plusieurs caches dans les rails?