【问题标题】:Grails\Hibernate: To cache or not to cache?Grails\Hibernate:缓存还是不缓存?
【发布时间】:2011-06-15 19:41:34
【问题描述】:

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
}

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

【问题讨论】:

    标签: hibernate grails ehcache


    【解决方案1】:

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

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

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

    【讨论】:

    • 最好的缓存策略是:不缓存!??当你写这篇文章时,你在哪里?
    • 你读过我写的吗?如果您在遇到缓慢时的第一反应是缓存东西,那么这是错误的。如果确定缓存会有所帮助,并且您已经对其进行了测量,那么缓存是一种替代方案。在不知道它是如何工作的、何时工作以及为什么工作的情况下,最好根本不缓存。
    • 我阅读了您所写的内容,我同意 5 步程序。我不同意总体上对缓存的激进方法以及您如何开始您的论点。有很多动态活动和成千上万的用户访问大型网站中的数据库或其他服务。说最好的缓存是非缓存是荒谬的! ...除非你说的是我奶奶的博客
    • 确实,很抱歉语气,但我会保留它。原因是大多数应用程序甚至达不到数百个并发请求,并且可以通过缓存解决的性能问题不是通用的解决方案,并且涉及到很多应用程序本身的内部工作知识。这就是为什么“不缓存”始终是最好的通用方法的原因,除非您可以证明并非如此。
    猜你喜欢
    • 2015-11-08
    • 1970-01-01
    • 2018-03-09
    • 2012-08-04
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多