Spring @CachePut响应是意外的

时间:2017-12-13 13:17:14

标签: caching ehcache

我正在使用带有SpringBoot的EhCache

我执行Get操作以检索列表并将响应保存在缓存中。它正常工作正常。 现在我在list的元素上执行Put操作。该元素的操作成功,并且缓存也更新了。 但是当我再次执行Get Operation来检索要测试的列表时 无论我的更新缓存是否有效,我只在响应中获得了一个更新而不是总列表

的元素

以下是代码段:

@Override
@Cacheable(value = "practiceId", key="#practiceId", unless="#result==null")
public List<ExposedLocation> getLocations(String practiceId) {
    // getLocations list logic
}
@CachePut(value = "practiceId", key ="#practiceId")
public List<ExposedLocation> updateLocation(List<LocationDB> locationList, String practiceId) {
    //Update location logic
}

ehcache.xml中:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="false">
<cache name="practiceId" maxEntriesLocalHeap="200" eternal="false"
    memoryStoreEvictionPolicy="LFU" timeToLiveSeconds="600"
    timeToIdleSeconds="200">
</cache>

根据我对Response的分析以及我使用的一些测试用例, 我的结论是,Get和Put的响应不同@CachePut将首先删除缓存并创建新缓存 它将更新的响应放在新缓存中。

所以任何人都可以协助我检索包含更新元素的完整列表。 我无法配置@CachePut ??????

1 个答案:

答案 0 :(得分:0)

Spring缓存抽象正是通过在同一个键下缓存任一方法的结果而完成的。 现在,如果你的方法确实返回了不同的结果,那就是问题的根源。

没有内置支持告知缓存此列表将与当前缓存的列表合并。