У меня есть сайт, на котором пользователи сначала вводят свои критерии поиска. Поиск объединяет данные из 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 и мою локальную базу данных)