【问题标题】:Hazelcast Hibernate Query Cache Region configurationHazelcast Hibernate 查询缓存区域配置
【发布时间】:2020-07-22 01:31:43
【问题描述】:

我在 P2P 模式和 Hibernate-5.3 下运行 Hazelcast 3.11。我已经为我的实体配置了具有过期策略的二级缓存区域。现在我正在尝试为我的查询缓存配置过期策略,但问题是,我找不到查询缓存默认区域名称,并且不确定它是否可以使用 hazelcast 映射进行配置。我尝试了下一个配置,但没有运气:

    eviction-policy: LFU
    in-memory-format: BINARY
    name: org.hibernate.cache.internal.*
    max-size: 1000
    max-size-policy: PER_NODE
    time-to-live: 10
    time-to-idle: 10

    eviction-policy: LFU
    in-memory-format: BINARY
    name: default-query-results-region
    max-size: 1000
    max-size-policy: PER_NODE
    time-to-live: 10
    time-to-idle: 10

是否可以使用 hazelcast 配置查询缓存区域?

【问题讨论】:

    标签: hibernate hazelcast second-level-cache query-cache


    【解决方案1】:

    编辑: 根据在执行查询期间设置的缓存区域名称,必须在 Hazelcast 配置上配置具有此区域名称的映射。例如,default-query-results-region 将被使用并且必须为以下查询进行配置:

    session.createQuery(QUERY_STRING).setCacheable(true);
    

    custom-name

    session.createQuery(QUERY_STRING).setCacheable(true).setCacheRegion("custom-name");
    

    您应该以编程方式或在 hazelcast.xml 上配置地图配置,以便:

    <map name="default-query-results-region">
        <max-size>1000</max-size>
        <time-to-live-seconds>10</time-to-live-seconds>
    </map>    
    
    <map name="custom-name">
        <max-size>1000</max-size>
        <time-to-live-seconds>10</time-to-live-seconds>
    </map>
    

    请记住,在 Hazelcast L2C 中,查询结果不会缓存在分布式地图中,而是缓存在本地地图中。 根据max-sizetime-to-live 标准定期执行基本清理程序。即使您设置了其他选项(驱逐策略、内存格式、空闲时间等),也会被忽略。

    【讨论】:

    • 感谢您的回答。为name="default-query-results-region" 设置任何配置对我不起作用,在我的原始帖子中提到过。更重要的是,我找不到任何具有该名称的地图\缓存,也找不到cacheManager.getCacheNames()SessionFactory.getStatistics()
    • 我能看到的唯一与休眠有关的缓存名称是"default-update-timestamps-region"
    • 那么您不能通过sessionFactory.getStatistics().getQueryCacheHitCount()sessionFactory.getStatistics().getQueryCacheMissCount() 找到统计数据吗?
    • 你可以试试这个:在 Hazelcast 上配置地图后,让我们说“QueryMap”; session.createQuery(query).setMaxResults(10).setCacheable(true).setCacheRegion("QueryMap");。然后您必须通过以下方式查看区域名称中的区域:factory.getStatistics().getSecondLevelCacheRegionNames()
    • 好吧,我的错。使用自定义查询区域为我工作(顺便说一句,我正在使用 JPA 数据存储库,它也适用于 QuryHints)。之后,我确实在 QuryHints 和地图配置名称中切换回 default-query-results-region,它也确实有效,尽管我无法让它工作一整天。好吧,看起来我错过了一些想法。感谢您的帮助。
    猜你喜欢
    • 2014-09-11
    • 2017-01-28
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2016-03-24
    • 2014-08-17
    • 1970-01-01
    相关资源
    最近更新 更多