缓存控制器响应

时间:2009-06-11 14:55:36

标签: java grails caching memcached

我想使用memcached来缓存我的控制器产生的响应。控制器本身就是Grails控制器,但没有关于这个问题的Grails特定的。如果我能弄清楚如何在Spring MVC,Struts(或类似的)应用程序中解决这个问题,我应该能够轻松地将解决方案迁移到Grails。

理想情况下,我想识别适合使用Java注释进行缓存的控制器方法。有人知道这个问题的现有解决方案吗?我应该强调一点,我对使用除memcached之外的任何缓存技术都不感兴趣。

谢谢, 唐

3 个答案:

答案 0 :(得分:2)

上一张海报所链接的Simple Spring Memcached库实际上可以完成你需要做的事情。它并不仅限于DAO方法。您可以注释一个控制器方法来缓存它的响应就像注释DAO方法一样容易。

因此,如果您有一个名为SimpleController的Controller并且您想要缓存该控制器的响应,那么您可以执行以下操作

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 :(得分:1)

Aaron,勇敢,

感谢您推荐我的项目:http://code.google.com/p/simple-spring-memcached/

Don,Aaron说SSM并不局限于DAO方法,但是他的例子有一些警告:

  1. 我认为HttpServletRequest的toString()方法不会产生好的密钥
  2. 您需要确保ModelAndView是Serializable
  3. 话虽如此,没有理由你不能委托给另一个有适当签名的bean
  4. 以下是一些代码示例:

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

答案 2 :(得分:0)

这样的事情能做到吗? http://code.google.com/p/simple-spring-memcached/