杂种:6.3.0.0-快照
我正在性能测试中,我需要禁用缓存。我已经禁用了数据库(mySQL)缓存,并且想禁用所有形式的应用程序缓存。是可能的吗?
我已经看到了其他问题,以及将setDisableCaching用于FlexibleSearch的建议。不幸的是,在Hybris的控制下有一些FlexibleSearch,我无法直接更改该方法。我希望接下来覆盖它,但我想知道是否有更简单的方法。
我还尝试在local.properties的tomcat.generaloptions中添加“ -Dnet.sf.ehcache.disabled = true”,但是该应用程序似乎在启动过程中挂起,并且服务器永不启动。
其他上下文:我们有一个Web服务,正在重现3,000个PointOfService记录。第一次通话太慢,客户端认为应用程序无法正常工作(可能已超时)。后续调用速度更快,因为数据已被缓存。我需要检查如何改善首次通话的性能。
答案 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个...元素。这样,通话速度会更快。它也不会过多地填充您的缓存并给服务器和数据库造成压力。此外,客户端将更加安全地处理数据。