我正在使用基于EhCache的cacheWriter来实现后写缓存实现。
这是配置:
<cache name="CACHE_JOURNALS"
maxElementsInMemory="1000"
eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120"
overflowToDisk="true" maxElementsOnDisk="10000000" diskPersistent="false"
diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU">
<cacheWriter writeMode="write-behind"
maxWriteDelay="2"
rateLimitPerSecond="20"
writeCoalescing="true"
writeBatching="false"
writeBatchSize="1"
retryAttempts="2"
retryAttemptDelaySeconds="2">
<cacheWriterFactory
class="JournalCacheWriterFactory"
properties="just.some.property=test; another.property=test2"
propertySeparator=";" />
</cacheWriter>
</cache>
在我执行cache.putWithWriter
之后cache.putWithWriter(new Element(key, newvalue));
另一个线程倾向于使用'key'
从缓存中读取观察:
似乎缓存是使用'key'更新的:newvalue只有在写入数据存储区后才会更新。
从documentation开始,似乎暗示了后者。
答案 0 :(得分:0)
Q1:不,我甚至不知道这会怎么样!
Q2:你所观察到的n / a不是预期的行为,但是新值应该立即在缓存中观察到。
是否可以通过某种类型的读取来使用此缓存并实际观察缓存的条目被逐出/过期并实际上使用数据存储区中的旧值重新填充?
答案 1 :(得分:0)
这对我来说是一个天真的错误,调用@Cacheble方法的代码来自同一个spring服务。
Spring不会拦截来自同一服务的调用。
我重构了缓存启用的代码,它按预期工作。