2011-01-26 104 views
5

什么是Hibernate \ Grails中最好的缓存策略。是否缓存所有实体和查询以及如何找到最佳解决方案?Grails Hibernate:缓存还是不缓存?

这里我的休眠配置。

hibernate { 
    cache.use_second_level_cache = true 
    cache.use_query_cache = true 
    cache.provider_class = 'org.hibernate.cache.EhCacheProvider' 
    connection.useUnicode = true 
    connection.characterEncoding = 'UTF-8' 
    connection.provider_class = 'org.hibernate.connection.C3P0ConnectionProvider' 
    dialect = 'org.hibernate.dialect.MySQL5InnoDBDialect' 
    order_updates = true 
    c3p0.min_size = 5 
    c3p0.max_size = 20 
    c3p0.max_statements = 20 * 10 
    c3p0.idle_test_period = 15 * 60 
} 

的Ehcache配置

<defaultCache 
     maxElementsInMemory="10000" 
     eternal="false" 
     timeToIdleSeconds="120" 
     timeToLiveSeconds="120" 
     overflowToDisk="true" 
     maxElementsOnDisk="10000000" 
     diskPersistent="false" 
     diskExpiryThreadIntervalSeconds="120" 
     diskSpoolBufferSizeMB="100" 
     memoryStoreEvictionPolicy="LRU" 
/> 

<cache 
      name="org.hibernate.cache.StandardQueryCache" 
      maxElementsInMemory="50" 
      eternal="false" 
      timeToLiveSeconds="120" 
      overflowToDisk="true" 
/> 

回答

11

最好的缓存策略是:没有缓存。严重的是,缓存(以及任何优化)只能解决现有问题。如果您没有性能问题,请不要使用缓存。如果您确实遇到性能问题,请使用此简单的5个步骤来解决性能问题:

  1. 措施。
  2. 措施。
  3. 优化(例如添加缓存)
  4. 衡量。
  5. 措施。

请注意,如果您不明白缓存如何在Hibernate中工作,则可能会导致性能下降,而不是改进它。此外,即使您了解Hibernate中的缓存如何工作,也可能会有其他影响性能的影响,导致数据库往返速度比查找缓存快。这就是为什么你应该在做“改进”之前和之后进行测量。

+0

最好的缓存策略是:不缓存!??当你写这个的时候你高的地方? – 2014-03-05 14:44:18