2011-01-26 107 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