ответ контроллера кеша - PullRequest
0 голосов
/ 11 июня 2009

Я бы хотел использовать memcached для кэширования ответа, выдаваемого моими контроллерами. Сами контроллеры являются контроллерами Grails, но в этой проблеме нет ничего специфичного для Grails. Если бы я мог выяснить, как решить эту проблему в приложении Spring MVC, Struts (или аналогичном), я бы легко смог перенести решение в Grails.

В идеале я хотел бы определить методы контроллера, которые могут кэшироваться, с использованием аннотаций Java. Кто-нибудь знает о существующем решении этой проблемы? Я должен подчеркнуть, что я не заинтересован в использовании какой-либо другой технологии кэширования, кроме memcached.

Спасибо, Дон

Ответы [ 3 ]

2 голосов
/ 11 июня 2009

Библиотека Simple 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 в течение часа, и любой входящий запрос, который совпадает с тем же запросом, вернет кэшированный ответ.

1 голос
/ 11 июля 2009

Аарон, бравертерри,

Спасибо за предложение моего проекта: http://code.google.com/p/simple-spring-memcached/

Дон, Аарон прав, что SSM не ограничивается методами DAO, однако для его примера есть несколько предостережений:

  1. Я не думаю, что метод toString () HttpServletRequest выдаст хороший ключ
  2. Вы должны убедиться, что ModelAndView поддерживает сериализацию
  3. При этом нет причин, по которым вы не можете делегировать другой бин с соответствующей подписью

Вот пример кода:

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)
      }
0 голосов
/ 11 июня 2009

Может ли что-то подобное сделать? http://code.google.com/p/simple-spring-memcached/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...