【发布时间】:2011-05-09 01:40:40
【问题描述】:
我有一个网站,用户将首先输入他们的搜索条件。搜索结合了来自 2 个来源的数据,其中一个不是数据库。搜索结果通常足够大,可以分页。
由于初始查询的开销很大,如果后续页面查看的搜索条件没有改变,我想缓存搜索结果。
我目前的方法是这样的:
def search(criteriaMap, offset, pagesize)
在 groovy/grails 中缓存搜索结果的最佳方式是什么?我将如何使搜索结果过期?
注意,我看到有一个 springcache 插件,但我不确定这是否适用于分页结果。我也知道 grails 是用 ehcache 打包的,但我没有看到我可以直接访问的 API,我只看到它用于 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 和我的本地数据库)
【问题讨论】:
标签: groovy ehcache grails-plugin grails