代码之家  ›  专栏  ›  技术社区  ›  Dónal

缓存控制器响应

  •  0
  • Dónal  · 技术社区  · 15 年前

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

    理想的是,我希望使用Java注释来识别有资格进行缓存的控制器方法。有人知道这个问题的现有解决方案吗?我要强调的是,除了memcached之外,我对使用任何缓存技术都不感兴趣。

    谢谢, 唐

    3 回复  |  直到 15 年前
        1
  •  2
  •   Aaron    15 年前

    前一张海报链接到的简单spring 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中缓存控制器的响应一个小时,任何与同一请求匹配的请求都将返回缓存的响应。

        2
  •  1
  •   user136817    15 年前

    亚伦,勇敢的特里,

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

    Don,Aaron说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)
          }
    
        3
  •  0
  •   braveterry    15 年前

    像这样的东西能起作用吗? http://code.google.com/p/simple-spring-memcached/