gpt4 book ai didi

java - 创建缓存时如何将所有缓存名称及其数据放入List<>中?

转载 作者:行者123 更新时间:2023-12-02 09:30:46 26 4
gpt4 key购买 nike

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

 private CacheManager 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
}

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

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

关于java - 创建缓存时如何将所有缓存名称及其数据放入List<>中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58007388/

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