Caching 在Grails中缓存域对象

Caching 在Grails中缓存域对象,caching,grails,Caching,Grails,我一直在考虑在Grails域对象中实现EhCache,如下所示: static mapping = { cache true } 我不太熟悉这种缓存机制的工作原理,我想知道在确定哪些域对象将从缓存中受益时,有什么好的经验法则。例如,很少访问的对象。。经常 谢谢 默认情况下,缓存仅适用于get()调用,但如果使用cache:true(条件和HQL)更新查询,则查询将使用查询缓存 cache true创建读写缓存,但您可以使用 static mapping = { cache usag

我一直在考虑在Grails域对象中实现EhCache,如下所示:

static mapping = {
   cache true
}
我不太熟悉这种缓存机制的工作原理,我想知道在确定哪些域对象将从缓存中受益时,有什么好的经验法则。例如,很少访问的对象。。经常


谢谢

默认情况下,缓存仅适用于
get()
调用,但如果使用
cache:true
(条件和HQL)更新查询,则查询将使用查询缓存

cache true
创建读写缓存,但您可以使用

static mapping = {
   cache usage:'read-only'
}
只读缓存适用于从不更改的查找数据,例如状态、国家/地区、角色等

如果有经常更新、创建或删除的域类,查询缓存通常比不缓存慢。这是因为这样的更改会导致清除所有缓存的查询,因此您通常直接访问数据库。有关此操作的更详细说明,请参阅。由于这个原因,我很少使用查询缓存,并且经常使用

hibernate {
    cache.use_second_level_cache=true
    cache.use_query_cache=false
    cache.provider_class='org.hibernate.cache.EhCacheProvider'
}
“大部分读取”的域类是读写缓存的最佳候选对象。缓存在每次更新、创建和删除时都会被清除,但如果这些缓存很少,您将看到总体性能提升


Hibernate有一个监视缓存使用情况的API。和插件使信息可用,您可以在自己的代码中使用这种方法。

有没有办法让缓存超时并重新读取?例如,指定最大年龄?Grails缓存似乎非常基本。我看到有很多ehcache插件,包括“ehcache Cache Plugin supported by Pivotal”,但不清楚这将如何通过hibernate通过其缓存(似乎也是ehcache)与grails内置的域缓存交互或干扰。嘿,Burt,有可能通过hibernate区域隔离域缓存吗?这意味着一个域中的更新不会导致清除所有其他域的查询缓存。