2009-04-08 5 views
7

J'ai une application rails où je voudrais utiliser les deux memcached et le cache de stockage de fichiers, à des fins différentes. Je souhaite utiliser le cache de stockage de fichiers pour conserver un grand nombre de pages qui ne changent pas souvent (certaines ne le sont pas), c'est-à-dire la mise en cache de pages, et utiliser memcached pour tout le reste (action et mise en cache de base de données etc.). La raison en est que les pages stockées dans le cache du magasin de fichiers nécessiteront probablement une grande quantité de stockage, mais individuellement, la plupart seront rarement consultées.Comment utiliser plusieurs caches dans les rails?

Est-ce possible de faire ou se memcached la configuration que le cache signifie qu'il est également utilisé pour la mise en cache de la page? En guise de question secondaire, quel est le moyen sûr de supprimer des pages du cache du magasin de fichiers sous une forme quelconque de travail cron, car il ne semble pas y avoir d'option permettant de spécifier ttl pour ce cache. Par exemple, une commande de recherche UNIX trouverait et supprimerait rapidement toutes les anciennes pages ou pages qui n'ont pas été consultées depuis longtemps - est-ce sûr car le serveur de l'application pourrait potentiellement essayer de servir une de ces pages à la fois (tho c'est très improbable)? Sinon, quelle est la meilleure façon de le faire.

+0

avez-vous trouvé quoi que ce soit sur l'utilisation de deux caches? J'aimerais le faire aussi. Nous sommes actuellement en cours d'exécution de Rails 2.0.2, ce qui rend la situation plus problématique ... – Chinasaur

+0

Oui, il semble que ce soit OK (et la valeur par défaut) pour combiner la mise en cache des pages, et (si vous configurez memcached du tout) mise en cache du reste – frankodwyer

Répondre

2

Si vous voulez utiliser le système de fichiers uniquement pour la mise en cache de la page et memcached pour l'action et la mise en cache de fragments, vous êtes très bien. Mise en cache des pages Toujours utilise le système de fichiers. Rappelez-vous simplement que la mise en cache des pages contourne votre application Rails, vous ne pouvez donc pas l'utiliser pour les pages qui incluent du contenu qui change d'utilisateur à utilisateur ou pour les pages dont l'accès est contrôlé par des filtres. En ce qui concerne la suppression des pages, sous Unix, un fichier peut être supprimé, mais il n'est pas réellement supprimé du disque tant que tous les descripteurs de fichiers ouverts ne sont pas fermés. Si le serveur d'applications a ouvert le fichier pour répondre à une requête et que la commande find le supprime une fraction de seconde plus tard, le serveur d'applications ne reçoit pas d'erreur lorsqu'il essaie de lire. Vous pouvez également envisager d'avoir find supprimer des fichiers en fonction de leur dernier temps d'accès, au lieu de la création ou de la modification, et d'utiliser un balayeur dans votre application Rails pour supprimer la page mise en cache lorsque son contenu est obsolète.

2

Une approche plus simple peut être d'utiliser un cache en amont http de votre application en tant que le cache de votre page plutôt que deux magasins dans les rails. De cette façon, vous pouvez utiliser les en-têtes http pour contrôler le comportement du cache, y compris les TTL. Ces mêmes limites s'appliqueront également aux caches locaux du navigateur comme un bon bonus. Il est à peu près aussi performant que possible, mais nécessiterait la configuration d'un autre composant mobile dans votre environnement d'hébergement en tant que proxy. Cela peut toujours valoir la peine selon ce que vous faites.

Une approche plus simple pourrait être Rack::Cache, qui sera facile à mettre en place à condition que vous utilisez un rack de version activée de rails.

Questions connexes