Кэширование данных в grails

У меня есть сайт, на котором пользователи сначала вводят свои критерии поиска. Поиск объединяет данные из 2 источников, один из которых не является базой данных. Результаты поиска обычно достаточно велики, чтобы их можно было вывести на страницы.

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

Мой текущий метод выглядит так. :

def search(criteriaMap, offset, pagesize)

Как лучше всего кэшировать результаты поиска в groovy / grails? Как мне удалить результаты поиска?

Обратите внимание, я вижу, что есть плагин springcache, но не уверен, будет ли он работать для результатов с разбивкой на страницы. Я также знаю, что grails упакован с ehcache, но я не видел API, к которому у меня есть прямой доступ, Я только видел, как он используется для кэширования 2-го уровня с GORM.

Обновление : Я использовал решение @ mfloryan для решения этой проблемы.

Я создал два метода в searchService :

@Cacheable("searchCache")
def searchResults(uid, trimmedParams)
def trimParams(params)

(Один кэшируется, а другой нет.)

Мой код в searchController :

def trimmedParams = searchService.trimParams(params)
def results = searchService.searchResults(trimmedParams)

//Page results
results = HelperService.pageResults(results, params.offset, params.max)

[results: results, searchParams : trimmedParams]

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

SearchController заботится о разбиении по страницам.

примечание : Я не кэшировал результаты гибернации, потому что в итоге я получу вдвое больше данных в кеше. Я кэшировал только объединенные результаты searchService. searchResults (который попадает в REST API и мою локальную базу данных)

6
задан Tihom 18 November 2010 в 15:53
поделиться