我正在使用带有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 ??????
答案 0 :(得分:0)
Spring缓存抽象正是通过在同一个键下缓存任一方法的结果而完成的。 现在,如果你的方法确实返回了不同的结果,那就是问题的根源。
没有内置支持告知缓存此列表将与当前缓存的列表合并。