繁体   English   中英

如何使Grails中的域类缓存超时(即指定最长期限)

[英]How to timeout a domain class cache in Grails (i.e. specify max age)

大多数静态,经常访问的域类(例如国家和货币)可以从缓存中受益匪浅。

class country {
    :
    static mapping = {
        cache  usage: 'read-only', include: 'non-lazy'
    }
}

但是,有时会在多服务器环境中添加新的国家或修改现有的国家。 我们正在寻找的解决方案是缓存超时,以便在每个域类可配置的时间(例如10分钟)之后,它会在请求获取时重新读取数据。

当前,唯一的选择是如果您缓存某些内容,则必须重新启动所有服务器。 我们不希望分发更改的分布式缓存的复杂性,而只是基于每个域的缓存老化选项。

grails 2.4.4是否可能实现此功能,还是我们需要实现自己的缓存层? 使用MyBatis指定最大期限(又名缓存超时)很容易-希望grails具有未记录的功能。

重启服务器远远不是唯一的选择。

mapping块中用于缓存的配置选项非常有限,但这至少部分是因为没有标准配置API,因此您需要根据提供程序来进行不同的操作。

默认实现是Ehcache,它的配置非常简单。 如果Ehcache在类路径的根目录中找到ehcache.xml文件,它将使用该文件而不是其默认值。 src/java非Java文件和grails-app/conf中的非Java /非Groovy文件在编译过程中被复制到类路径中的目录中,因此最好放置文件以使其可访问。

使用这个注释严重的示例ehcache.xml文件开始使用。

如果要删除一个或多个缓存的实例,Hibernate会提供一个API。 您可以在sessionFactory bean上调用几种“退出”方法,例如, sessionFactory.evict(Book)删除所有缓存的Book实例, sessionFactory.evict(Book, 5)删除ID为5的缓存Book ,等等。

SpringOne / 2GX演讲的幻灯片中有很多相关信息,包括配置Ehcache和使用2级缓存API。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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