[英]How to setup service method caching in grails
我的应用程序有几个服务,它们可以通过httpClient(GET和POST)进行外部调用,这些服务几个月之内不会发生变化,但是速度很慢。 使我的应用程序变得更慢。 澄清:这不是关于将GORM /休眠/查询缓存到我的数据库中。
如何在grails 2.1.0中缓存这些方法(磁盘上的持久性获得奖励积分...)?
我已经安装了grails-cache-plugin,但是它似乎没有用,或者我配置错了(很难做,因为只添加了2-5行,但是我过去已经做到了)
我还尝试在应用程序前面设置nginx代理缓存,但是当我提交其中一个表单进行了微小的更改时,我得到的是第一个提交的结果。
任何建议/想法将不胜感激。
编辑 :当前解决方案(基于Marcin的答案)
我的config.groovy :(仅缓存部分)
//caching
grails.cache.enabled = true
grails.cache.clearAtStartup = false
grails.cache.config = {
defaults {
timeToIdleSeconds 3600
timeToLiveSeconds 2629740
maxElementsInMemory 1
eternal false
overflowToDisk true
memoryStoreEvictionPolicy 'LRU'
}
diskStore {
path 'cache'
}
cache {
name 'scoring'
}
cache {
name 'query'
}
}
重要的部分是:
Grails缓存插件在Grails 2.3.11下对我来说效果很好。 文档非常整洁,但是只是为了向您展示草案...
我在Config.groovy
使用以下设置:
grails.cache.enabled = true
grails.cache.clearAtStartup = true
grails.cache.config = {
defaults {
maxElementsInMemory 10000
overflowToDisk false
maxElementsOnDisk 0
eternal true
timeToLiveSeconds 0
}
cache {
name 'somecache'
}
}
然后,在服务中,我使用类似以下内容:
@Cacheable(value = 'somecache', key = '#p0.id.toString().concat(#p1)')
def serviceMethod(Domain d, String s) {
// ...
}
注意somecache
部分已被重用。 同样,在我的情况下,使用String
作为键也很重要。 这就是为什么我在id
上使用toString()
的原因。
还可以将插件设置为使用磁盘存储,但我不使用它。
如果没有帮助,请提供有关您的问题的更多详细信息。
这可能无济于事,但是如果将应用程序升级到Grails 2.4.x,则可以使用@Memoize批注。 这将根据传递给它的参数自动缓存每个方法调用的结果。
为了存储“几乎静态”的信息,您可以使用Memcached或Redis作为缓存系统。 (还有很多)
这两个缓存系统允许您存储键值数据(在您的情况下,类似于“ key_GET”:JSON,XML,MAP,String)。
这是一篇相关的文章: Memcached与Redis?
问候。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.