2009-06-11 9 views
0

Je voudrais utiliser memcached pour mettre en cache la réponse produite par mes contrôleurs. Les contrôleurs eux-mêmes sont des contrôleurs Grails, mais il n'y a rien de vraiment spécifique au Grails sur le problème. Si je pouvais trouver comment résoudre ce problème dans une application Spring MVC, Struts (ou similaire), je devrais facilement pouvoir migrer la solution vers Grails.réponse du contrôleur de cache

Idéalement, j'aimerais identifier les méthodes de contrôleur pouvant être mises en cache à l'aide d'annotations Java. Est-ce que quelqu'un est au courant d'une solution existante pour ce problème? Je dois souligner que je ne suis pas intéressé par l'utilisation d'une technologie de mise en cache autre que memcached.

Merci, Don

Répondre

2

La bibliothèque Simple Spring Memcached avec laquelle le poster précédent est lié accomplira réellement ce que vous devez faire. Il ne se limite pas aux seules méthodes DAO. Vous pouvez annoter une méthode de contrôleur pour mettre en cache sa réponse aussi facilement que pour annoter une méthode DAO.

Donc, si vous avez un contrôleur nommé SimpleController et que vous vouliez mettre en cache la réponse de ce contrôleur, vous pouvez effectuer les opérations suivantes

public class SimpleController implements Controller { 
    @ReadThroughSingleCache(namespace = "SimpleController", keyIndex = 0, expiration = 3600) 
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) { 
    return new ModelAndView("index") 
    } 

Cela cache la réponse du contrôleur Memcached pendant une heure et toute requête qui entre dans la même requête retournera la réponse mise en cache.

1

Aaron, braveterry,

Merci pour suggérer mon projet: http://code.google.com/p/simple-spring-memcached/

Don, Aaron est exact que SSM ne se limite pas aux méthodes de DAO, mais il y a quelques mises en garde pour son exemple:

  1. Je ne pense pas que la méthode toString de HttpServletRequest() produirait une bonne clé
  2. Vous devez vous assurer que ModelAndView est Serializable
  3. Cela étant dit, il n'y a aucune raison que vous ne pouvez pas déléguer à un autre bean qui a une signature appropriée

Voici un code d'exemple:

public class SimpleController implements Controller { 
     private BeanWithAnnotatedMethod bean; // Injected resource 
     public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) { 
     Object keyObject = Helper.generateAppropriateKey(request); 
     String result = bean.annotatedMethod(keyObject); 
     return new ModelAndView(result) 
     } 
Questions connexes