我一直在考虑在我的Grails域对象中实现EhCache,如下所示:
static mapping = {
cache true
}
Run Code Online (Sandbox Code Playgroud)
我不太熟悉这个缓存机制是如何工作的,并且想知道在确定哪些域对象可以从缓存中受益时,有什么好的经验法则.例如,很少被访问的对象...通常......?
谢谢!
Bur*_*ith 29
缓存仅get()在默认情况下适用于调用,但如果使用cache: true(条件和HQL)更新查询,查询将使用查询缓存.
cache true 创建读写缓存,但您可以使用配置只读缓存
static mapping = {
cache usage:'read-only'
}
Run Code Online (Sandbox Code Playgroud)
只读缓存适用于永不更改的查找数据,例如状态,国家/地区,角色等.
如果您经常更新,创建或删除域类,则查询缓存通常比不缓存慢.这是因为这些更改会导致清除所有缓存的查询,因此您无论如何都经常直接访问数据库.有关此内容的更详细说明,请参见http://tech.puredanger.com/2009/07/10/hibernate-query-cache/.出于这个原因,我很少使用查询缓存,并经常完全禁用它
hibernate {
cache.use_second_level_cache=true
cache.use_query_cache=false
cache.provider_class='org.hibernate.cache.EhCacheProvider'
}
Run Code Online (Sandbox Code Playgroud)
"主要读取"的域类是读写缓存的最佳候选者.每次更新,创建和删除都会清除缓存,但如果这些缓存有点罕见,您将看到整体性能提升.
Hibernate有一个API来监控缓存使用情况.该http://grails.org/plugin/app-info和http://grails.org/plugin/hibernate-stats插件使提供的信息,你可以在自己的代码有使用的方法.