繁体   English   中英

如何在Grails中设置服务方法缓存

[英]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.cache.clearAtStartup = false)
  • overflowToDisk = true可将所有结果持久保存在maxElementsInMemory上
  • maxElementsInMemory = 1减少了内存中的元素数量
  • 运行应用程序的用户应可写“ diskStore”。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM