gpt4 book ai didi

java - 在使用 Ehcache 刷新只读缓存之前,我需要锁定它吗?

转载 作者:搜寻专家 更新时间:2023-11-01 03:08:07 25 4
gpt4 key购买 nike

我正在多线程环境中实现 Ehcache。我有 1 个线程专用于管理和刷新缓存,其他线程可以在任何给定时间调用它。

缓存是只读的,但每 30 分钟刷新一次。 Ehchache 是否在更新缓存时自动管理和锁定对缓存的读取访问权限?还是我需要用 acquireReadLockOnKey() 语句包装?

Ehcache cache = getCache();
cache.acquireReadLockOnKey(element);
try {
cache.put(element);
}
finally {
cache.releaseReadLockOnKey(element);
}

更新:以下是有关实现的更多详细信息。上面的代码是针对“updateCache()”方法的,但下面是它最初的创建方式。

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Ehcache;

public class TTLCacheProviderHelper {
private CacheManager cacheManager = null;
Ehcache myTtlCache = null;
private static final String CACHE_NAME = "myTTLCache";
private static int TTL_VALUE = 1800;
private static EvictTimeClock evictTimeClock = null;


/**
* Constructor
*/
public TTLCacheProviderHelper() {
cacheManager = CacheManager.create();
Cache testCache = new Cache(CACHE_NAME, 100, false, false, 10, 10);
Ehcache originalCache = testCache;
cacheManager.addCache(originalCache);
myTtlCache = cacheManager.getCache(CACHE_NAME);
String ttlValue = AppConfigService.getInstance().getTTL();
if(ttlValue!= null)
TTL_VALUE = Integer.parseInt(ttlValue);
evictTimeClock = new EvictTimeClock();
setEvictTimeClock(TTL_VALUE);
}

Ehcache getCache(){
return myTtlCache;
}`

及其配置:`

    <cache name="configCache" maxElementsInMemory="100000" eternal="true" overflowToDisk="false" />

<cache name="validationTemporaryCache" maxElementsInMemory="10000"
eternal="false" overflowToDisk="false" timeToIdleSeconds="500"
timeToLiveSeconds="500" />

</ehcache>`

最佳答案

如果你的场景是read -> flush -> recalculate -> put -> read,那么答案是否定的,Ehcache 不会自动阻塞所有读取器,直到计算出新值。你需要做的是使用它的 read-through mechanism或类似的东西。

但如果您的场景是read -> recalculate -> replace -> read,那么我认为不需要任何额外的锁定。

关于java - 在使用 Ehcache 刷新只读缓存之前,我需要锁定它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15627009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com