创建缓存时,如何将所有缓存名称及其数据放入列表中<>?



我用过Ehcache 3,我是Ehcache 3的新手,我有一个缓存管理器,如下所示:

private CacheManager cacheManager;

现在,当对象被创建时,缓存管理器被初始化:

public ListPlanImpl() {
System.out.println("constructore being initalized");
System.getProperties().setProperty("java -Dnet.sf.ehcache.use.classic.lru", "true");
cacheManager = CacheManagerBuilder
.newCacheManagerBuilder().build();
cacheManager.init();

}

cacheManager 初始化后,这是我的主类,其中发生所有获取和放入缓存的操作。我已经将几个数据插入到不同的缓存中,例如:

@Stateless
public class ListPlanImpl implements CachePlan,ListPlan {
private static final String CACHE_OPERATING_PARAMETER = "cache_key_operating_parameter";
private static final String CACHE_SECURITY_PARAMETER = "cache_security";
private static Cache<String, GenericClassForList> operatingParametersCache;
private static Cache<String, GenericClassForList> securitiesTradingParameterCache;
public void putInCache() throws ExecutionException, InterruptedException {
System.out.println("putting in list");
this.operatingParametersCache = cacheManager
.createCache("cacheOfOperatingParameters", CacheConfigurationBuilder
.newCacheConfigurationBuilder(
String.class, GenericClassForList.class,
ResourcePoolsBuilder.heap(1000000000)).withExpiry(Expirations.timeToLiveExpiration(Duration.of(60000,
TimeUnit.SECONDS))));
operatingParametersCache.put(CACHE_OPERATING_PARAMETER, new GenericClassForList(this.operatingParamService.getOperatingParamDTO()));

this.securitiesTradingParameterCache = cacheManager
.createCache("cacheOfSecurityTrading", CacheConfigurationBuilder
.newCacheConfigurationBuilder(
String.class, GenericClassForList.class,
ResourcePoolsBuilder.heap(1000000000)).withExpiry(Expirations.timeToLiveExpiration(Duration.of(60000,
TimeUnit.SECONDS))));
securitiesTradingParameterCache.put(CACHE_SECURITY_PARAMETER, new GenericClassForList(this.securitiesTradingParamsService.getSecuritiesTradingParamDTO()));
}
}

我想要一个单独的函数,它将向我返回缓存中数据总数的所有缓存名称和计数,以便我可以在 UI 中显示包含数据的缓存。我搜索了问题,但没有找到解决方案。

Cache实现了Iterable<Cache.Entry<K,V>>,因此您可以迭代条目以获取每个缓存的键和值,例如:

for( Cache.Entry<String, GenericClassForList> entry : operatingParametersCache) { 
String key = entry.getKey(); 
GenericClassForList value = entry.getValue(); 
//if counting just increasing a counter might be sufficient, 
//otherwise use the key and value as needed 
}

由于您已经有对缓存的引用,因此只需将该方法应用于每个单独的缓存即可。

如果您没有方便的引用,则可以在缓存使用的别名上保留一些注册表(您提供别名,以便可以使用它们从缓存管理器获取缓存(。如果你也不能做到这一点,你可能需要跟踪提供给缓存管理器的别名,例如,通过用委托包装它。

相关内容

  • 没有找到相关文章

最新更新