2009-06-11 164 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) 
     }