【问题标题】:Spring @CachePut response is unexpectedSpring @CachePut 响应是意外的
【发布时间】:2018-05-27 09:35:06
【问题描述】:

我正在使用 EhCache 和 SpringBoot

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

这里是sn-p的代码:

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

【问题讨论】:

    标签: caching ehcache


    【解决方案1】:

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

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

    【讨论】:

    • 所以你的意思是说我需要添加逻辑以备份以前的缓存,然后将其合并到新的。正确????
    • 要么这样做,要么确保两种方法都返回相同的结果。
    猜你喜欢
    • 2015-04-15
    • 2016-12-29
    • 2020-03-18
    • 1970-01-01
    • 2019-05-08
    • 2019-01-21
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多