groovy – 在grails中缓存数据
我有一个网站,用户将首先输入他们的搜索条件.搜索结合了来自两个来源的数据,其中一个来源不是数据库.搜索结果通常足够大,可以进行分页.
由于初始查询很昂贵,如果搜索条件没有随后的页面查看更改,我想缓存搜索结果. 我目前的方法如下: 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负责分页. 注意:我没有缓存hibernate结果,因为我最终会在缓存中加倍数据.我只缓存了来自searchService.searchResults的组合结果(它访问了REST API和我的本地数据库) 解决方法
首先,如果你想缓存查询,那么也许使用Hibernate查询缓存是一个很好的开始(在映射中设置缓存:true并传递缓存:true到executeQuery)
使用SpringCache plug-in将允许您缓存来自控制器的整个响应.您需要做的就是像这样装饰控制器:@Cacheable(“searchMethodCache”)或只装饰您想要缓存结果的单个方法.缓存将通过查询字符串保存响应,因此它应该适用于分页. EH Cache本身在grails-app / conf / spring / resources.groovy中配置 – 更新 – 在你发表评论后,我开始怀疑你可能会想到一个稍微不同的解决方案.因此,有一个查询返回结果列表,然后分页并显示该列表.使用标准的Grails方法,Hibernate将为每个页面生成一个查询(从完整列表返回一个子集,从而为每个页面运行一次可能昂贵的查询).据推测,您希望查询运行一次 – 返回缓存的完整结果集,然后从中提供单个页面.如果是这种情况,据我所知,你必须手动从Hibernate缓存中分页结果或在其他地方缓存结果集(Session context?) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |