当前位置: 首页 > 知识库问答 >
问题:

如何把所有的缓存名称和他们的数据在列表当缓存创建?

诸葛利
2023-03-14

我使用过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中显示包含数据的缓存。我寻找这个问题,但没有找到解决办法。

共有1个答案

西门骁
2023-03-14

缓存实现迭代

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 
}

因为已经有了对缓存的引用,所以只需将该方法应用于每个单独的缓存。

如果你手边没有引用,你可以在缓存使用的别名上保留一些注册表(你提供了别名,这样你就可以使用这些别名从缓存管理器获取缓存)。如果做不到这一点,您可能需要跟踪提供给缓存管理器的别名,例如用委托包装别名。

 类似资料:
  • 问题内容: 我是Apache Spark的新手,我创建了几个RDD和DataFrame,并对其进行了缓存,现在我想使用以下命令取消持久化其中的一些 但我不记得他们的名字。我用过,但是输出不包含名称。我还使用浏览器查看了缓存的rdds,但再次没有名称信息。我想念什么吗? 问题答案: @Dikei的答案实际上是正确的,但我相信您正在寻找的是: 现在让我们添加另一个并命名它: 我们注意到它实际上并没有持

  • 问题内容: 我想在这里提出我的问题: 根据获得的少量视图,在具有单独后端服务器的安装上刷新Magento Redis Cache的问题有点过于具体,因此我要提出一个更简单,更通用的问题。 我的问题的详细信息在链接的问题中。但是要点是,如果我尝试从管理区域刷新缓存或刷新magento缓存,它将尝试清除看起来不存在的“zc:ti:403_FPC”之类的内容。相反,它们被命名为“zc:ti:109_FP

  • 我用ReactJS构建了一个渐进式Web应用程序,但遇到了一个问题。我正在使用mockApi获取数据。脱机时,我的应用程序不工作,因为服务人员只缓存静态资产。 如何将HTTP GET调用从mockApi保存到缓存存储?

  • 我读到我可以在缓存更新时驱逐整个缓存,但我想避免类似的事情: 有什么方法可以在缓存的集合中创建/更新/删除值吗?还是将集合中的所有值缓存为单个键?

  • 数据缓存是指将一些 PHP 变量存储到缓存中,使用时再从缓存中取回。 它也是更高级缓存特性的基础,例如查询缓存 和内容缓存。 如下代码是一个典型的数据缓存使用模式。 其中 $cache 指向缓存组件: // 尝试从缓存中取回 $data $data = $cache->get($key); if ($data === false) { // $data 在缓存中没有找到,则重新计算它

  • setStorageSync 基础库1.3.9开始支持,iOS版本2.1.23,Android版本2.1.38 setStorageSync(string key, any data) ft.setStorage 的同步版本 参数 string key 本地缓存中指定的 key any data 需要存储的内容。只支持原生类型、Date、及能够通过JSON.stringify序列化的对象。 示例代