Spring @CachePut 响应出乎意料

Spring @CachePut response is unexpected

我正在将 EhCache 与 SpringBoot 一起使用

我执行 Get 操作来检索列表并将响应保存在 cache.It 中,按预期工作正常。 现在我正在对 list.Put 的元素执行 Put 操作,该元素的操作成功并且缓存也已更新。 但是当我再次执行获取操作以检索要测试的列表时 无论我的更新缓存是否正常工作,我在响应中只得到一个更新的元素而不是总列表

这是代码片段:

@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 失败??????

Spring 缓存抽象通过在同一键下缓存任一方法的结果来完全满足您的要求。 现在,如果您的方法确实 return 不同的结果,那就是问题的根源。

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