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 不同的结果,那就是问题的根源。
没有内置支持告诉缓存此列表将与当前缓存的列表合并。
我正在将 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 不同的结果,那就是问题的根源。
没有内置支持告诉缓存此列表将与当前缓存的列表合并。