Grails\Hibernate:缓存还是不缓存?

Grails\Hibernate:缓存还是不缓存?,hibernate,grails,ehcache,Hibernate,Grails,Ehcache,Hibernate\Grails中最好的缓存策略是什么。是否缓存所有实体和查询以及如何找到最佳解决方案 这里是我的休眠配置 hibernate { cache.use_second_level_cache = true cache.use_query_cache = true cache.provider_class = 'org.hibernate.cache.EhCacheProvider' connection.useUnicode = true connection.

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

这里是我的休眠配置

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
}
Ehcacheconfig

<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"
/>


最好的缓存策略是:不缓存。说真的,缓存(和任何优化)只应该用于解决现有问题。如果没有性能问题,请不要使用缓存。如果确实存在性能问题,则应用以下简单的5步程序来解决性能问题:

  • 优化(例如,添加缓存)

  • 请注意,如果您不了解Hibernate中的缓存是如何工作的,那么最终可能会导致性能低下,而不是提高性能。此外,即使您了解Hibernate中缓存的工作原理,也可能有其他影响性能的因素,导致数据库往返比查找缓存更快。这就是为什么你应该在做“改进”之前和之后进行衡量

    最好的缓存策略是:不缓存!??你写这篇文章的时候在哪里?你读过我写的吗?如果你面对缓慢时的第一反应是缓存东西,那么这是错误的。如果你确信缓存会有帮助,并且你已经测量过了,那么缓存是一种替代方法。在不知道它是如何工作的,何时工作以及为什么工作的情况下,最好不要缓存。我读了你写的,我同意5步程序。我不同意对缓存采取激进的做法,也不同意你的论点是如何开始的。在大型网站中,有很多动态活动和成千上万的用户访问数据库或其他服务。说最好的缓存是非缓存是荒谬的。。。除非你说的是我奶奶的博客,真的,对不起,但是我会保留它。原因是大多数应用程序甚至达不到数百个并发请求,而可以通过缓存解决的性能问题并不是通用的解决方案,它涉及应用程序本身内部工作的大量知识。这就是为什么“无缓存”总是最好的通用方法,除非您可以证明不是这样。