如何禁用ehcache或所有类型的缓存?

时间:2018-11-18 12:26:37

标签: ehcache hybris

杂种:6.3.0.0-快照

我正在性能测试中,我需要禁用缓存。我已经禁用了数据库(mySQL)缓存,并且想禁用所有形式的应用程序缓存。是可能的吗?

我已经看到了其他问题,以及将setDisableCaching用于FlexibleSearch的建议。不幸的是,在Hybris的控制下有一些FlexibleSearch,我无法直接更改该方法。我希望接下来覆盖它,但我想知道是否有更简单的方法。

我还尝试在local.properties的tomcat.generaloptions中添加“ -Dnet.sf.ehcache.disabled = true”,但是该应用程序似乎在启动过程中挂起,并且服务器永不启动。

其他上下文:我们有一个Web服务,正在重现3,000个PointOfService记录。第一次通话太慢,客户端认为应用程序无法正常工作(可能已超时)。后续调用速度更快,因为数据已被缓存。我需要检查如何改善首次通话的性能。

4 个答案:

答案 0 :(得分:2)

新的缓存是“区域缓存”。

如果要禁用缓存,则必须将所有区域缓存的大小设置为0。不会真正禁用它,但是不会缓存任何内容。

您可以使用其他回复Registry.getCurrentTenant().getCache().setEnabled(false);

中提到的代码禁用它

您可以通过在local.properties cache.legacymode=true中进行设置来使用旧缓存。 但是,这不会禁用所有缓存。

现在,如果您的问题是查询大量对象时响应时间短,则可能需要定义自己的缓存区域并在属性中设置适当的值:

<alias name="defaultMyObjectCacheRegion" alias="myObjectCacheRegion"/>
<bean name="defaultMyObjectCacheRegion" class="de.hybris.platform.regioncache.region.impl.EHCacheRegion">
    <constructor-arg name="name" value="MyObjectCacheRegion" />
    <constructor-arg name="maxEntries" value="${regioncache.myObjectcacheregion.maxentries}" />
    <constructor-arg name="evictionPolicy" value="${regioncache.myObjectcacheregion.evictionpolicy}" />
    <constructor-arg name="statsEnabled" value="${regioncache.stats.enabled}" />
    <constructor-arg name="exclusiveComputation" value="${regioncache.exclusivecomputation}" />
    <property name="handledTypes">
        <array>
            <value>[MyObject typecode]</value>
        </array>
    </property>

最后,您不应该尝试禁用Hybris缓存,这几乎是不可能的。但是您可以轻松清除它以进行测试。 如果您有性能问题,建议您也看一下数据库事务。这通常是一个瓶颈。参见:https://help.hybris.com/1808/hcd/8c7387f186691014922080f2e053216a.html

答案 1 :(得分:1)

您可以从以下位置手动删除Hybris缓存: https://localhost:9002/hac/monitoring/cache

答案 2 :(得分:1)

在HAC的提交模式下,将以下内容作为常规脚本运行

tenant.getCurrentTenant().getCache().setEnabled(false);

要重新启用它,请将false更改为true。

答案 3 :(得分:1)

您是否考虑过在PointOfService调用中添加分页?让客户端一次只请求10/100个元素。然后,客户端可以随后请求前10个,后10个...元素。这样,通话速度会更快。它也不会过多地填充您的缓存并给服务器和数据库造成压力。此外,客户端将更加安全地处理数据。