ehcache后写行为

时间:2014-08-06 09:41:44

标签: ehcache

我正在使用基于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'

从缓存中读取

观察:

  • 如果&lt; 2s然后我得到旧值
  • if&gt; 2s然后我得到更新的值(newvalue)

似乎缓存是使用'key'更新的:newvalue只有在写入数据存储区后才会更新。

  • Q1.这是后写的预期行为吗?
  • 问题2.有没有办法让它用'key'来更新缓存:newvalue就是这么快 当'putWithWriter'调用完成,然后有一个延迟写 后面。

documentation开始,似乎暗示了后者。

2 个答案:

答案 0 :(得分:0)

Q1:不,我甚至不知道这会怎么样!

Q2:你所观察到的n / a不是预期的行为,但是新值应该立即在缓存中观察到。

是否可以通过某种类型的读取来使用此缓存并实际观察缓存的条目被逐出/过期并实际上使用数据存储区中的旧值重新填充?

答案 1 :(得分:0)

这对我来说是一个天真的错误,调用@Cacheble方法的代码来自同一个spring服务。

Spring不会拦截来自同一服务的调用。

我重构了缓存启用的代码,它按预期工作。