Как сделать кэш в Grails? - PullRequest
       3

Как сделать кэш в Grails?

0 голосов
/ 27 февраля 2012

Вот то, что я пытаюсь или делаю, я просто показываю примерно 100 tasks экземпляр на странице.Отображаемые задачи являются ссылками (с возможностью нажатия), щелкнув по ним, вы перейдете на конкретную страницу показа экземпляра tasks.С этой страницы показа пользователь может вернуться на страницу, на которой он / она был раньше, то есть на страницу отображения 100 tasks.

Теперь в этот раз я снова извлекаю эти 100 экземпляров задач из БД, мне нужен способ их "кэшировать", чтобы не было необходимости извлекать снова.Есть ли способ сделать это?

Редактировать:

def user = User.get(springSecurityService.principal.id)
         sleep(1000)
          params.max = Math.min(params.max ? params.int('max') : 10, 100)
         def tasks = Tasks.findAllByIsReadAndUser(false,user,[cache:true],params)
         def tasksCount = Tasks.createCriteria().list(max: params.max as Integer, offset: params.offset as Integer) {
             and {
                 eq('user',user)
                 eq('isRead',false)
             }
         }
         if(request.xhr) {
            render(view:'scroll', model:[userTasks:tasks,tasksCount: tasksCount.getTotalCount()])
         }
         else
         {
            [userTasks: tasks, tasksCount: tasksCount.getTotalCount()]
         }
    }

В частности, у меня есть этот код, который работает, если пользователь нажимает полосу прокрутки в нижней части своей страницы и получает дополнительные данные:

 (function() {
                      jQuery(function() {
                        return $(window).scroll(function() {
                          var url;
                          url = $('.pagination .nextLink').attr('href');
                          if (url && $(window).scrollTop() > $(document).height() - $(window).height() - 50) {
                            $('.pagination').show();
                            $('.pagination').text('Fetching more data please wait...');
                            return $.get(url, function(data) {
                              $('#scrolling').append(data);
                              return $('.pagination').hide();
                            });
                          }
                        });
                      });
                    }).call(this);

Теперь проблема в том, что, несмотря на добавление cache:true в код моего контроллера и кеша, из-за этого кода jquery я снова получаю данные!

Как мне это остановить?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 27 февраля 2012

Grails поддерживает Hibernate кэш второго уровня.Вы можете включить его в объекте домена, например:

class Book {
    …
    static mapping = {
        cache true
    }
}

Для получения более подробной информации ознакомьтесь с Отображение базы данных - кеш или 5.5.2.2 Стратегия кэширования

0 голосов
/ 08 октября 2012

Параметр cache:true кэширует доменные объекты в кеше L2 Hibernate. Это кеш между приложением и базой данных. Другими словами, если вы снова получите те же объекты из Grails, он получит объекты из памяти (кэш L2) и больше не будет запрашивать базу данных.

Это не будет кэшировать запросы между браузером и приложением. К счастью, в браузерах уже есть кеш для этой цели.

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