2009-06-11 119 views
0

我想使用memcached来缓存我的控制器产生的响应。控制器本身就是Grails控制器,但Grails对这个问题没有具体的描述。如果我能够在Spring MVC,Struts(或类似的)应用程序中弄清楚如何解决这个问题,我应该很容易将解决方案迁移到Grails。缓存控制器响应

理想情况下,我想确定可以使用Java注释进行缓存的控制器方法。有没有人知道这个问题的现有解决方案?我应该强调,我对使用除memcached以外的任何缓存技术不感兴趣。

谢谢, 唐

回答

2

简单的春天Memcached图书馆的上一张海报链接将实际上完成你需要做的。它并不仅限于DAO方法。您可以注释一个控制器方法来缓存它的响应,就像注释一个DAO方法一样容易。

所以,如果你有一个名为SimpleController控制器和你想要来缓存控制器的响应,你可以做以下

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

这将缓存在Memcached的控制器的一个小时响应和任何匹配相同请求的请求都会返回缓存的响应。

1

亚伦,braveterry,

感谢提示我的项目:http://code.google.com/p/simple-spring-memcached/

唐,阿龙是正确的SSM不限于DAO的方法,但也有对他的榜样几个注意事项:

  1. 我不认为的HttpServletRequest的toString()方法将产生良好的关键
  2. 您将需要确保ModelAndView的是序列化
  3. 话虽这么说,没有任何理由,你不能委派到具有适当的签名

这里另一个bean的一些代码为例:

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