首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以使用JCache API来实现Apache中的分布式缓存吗?

我可以使用JCache API来实现Apache中的分布式缓存吗?
EN

Stack Overflow用户
提问于 2016-01-26 15:31:15
回答 2查看 2.1K关注 0票数 1

我想使用JCache API (JSR107,javax.cache)使用Apache配置一个分布式缓存。这个是可能的吗?

我发现的示例要么使用Apache创建本地缓存,要么使用Apache创建分布式缓存(或datagrid)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-26 22:39:18

JCache允许在创建缓存时提供特定于提供程序的配置。也就是说,你可以做到:

代码语言:javascript
运行
复制
// Get or create a cache manager.
CacheManager cacheMgr = Caching.getCachingProvider().getCacheManager();

// This is an Ignite configuration object (org.apache.ignite.configuration.CacheConfiguration).
CacheConfiguration<Integer, String> cfg = new CacheConfiguration<>();

// Specify cache mode and/or any other Ignite-specific configuration properties.
cfg.setCacheMode(CacheMode.PARTITIONED);

// Create a cache based on configuration create above.
Cache<Integer, String> cache = cacheMgr.createCache("a", cfg);

还请注意,分区模式实际上是Ignite中的默认模式,因此不需要显式指定它。

此外,UPD.方法接受特定于提供程序的URI,在Ignite情况下,该URI应该指向XML文件。可以在那里提供发现、通信和其他参数。

票数 4
EN

Stack Overflow用户

发布于 2016-05-18 16:13:08

请注意,JCache规范并没有指定适用于单个缓存提供程序的所有配置,比如通过CacheManager来创建网格。创建CacheManager的要求是标准的,但与管理器本身的配置方式无关。

下面的代码将演示如何在SpringBoot中使用Apache创建网格

代码语言:javascript
运行
复制
@Bean
@SuppressWarnings("unchecked")
public org.apache.ignite.cache.spring.SpringCacheManager cacheManager() {
    IgniteConfiguration igniteConfiguration = new IgniteConfiguration();
    igniteConfiguration.setGridName("petclinic-ignite-grid");
    //igniteConfiguration.setClassLoader(dynamicClassLoaderWrapper());

    igniteConfiguration.setCacheConfiguration(this.createDefaultCache("petclinic"),
            this.createDefaultCache("org.hibernate.cache.spi.UpdateTimestampsCache"),
            this.createDefaultCache("org.hibernate.cache.internal.StandardQueryCache"));

    SpringCacheManager springCacheManager = new SpringCacheManager();
    springCacheManager.setConfiguration(igniteConfiguration);
    springCacheManager.setDynamicCacheConfiguration(this.createDefaultCache(null));
    return springCacheManager;
}

private org.apache.ignite.configuration.CacheConfiguration createDefaultCache(String name) {

    org.apache.ignite.configuration.CacheConfiguration cacheConfiguration = new org.apache.ignite.configuration.CacheConfiguration();
    cacheConfiguration.setName(name);
    cacheConfiguration.setCacheMode(CacheMode.PARTITIONED);
    cacheConfiguration.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
    cacheConfiguration.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
    cacheConfiguration.setStatisticsEnabled(true);
    cacheConfiguration.setEvictSynchronized(true);
    return cacheConfiguration;
 }
}

如果我们要创建该服务的另一个实例并将其注册到与igniteConfiguration.setGridName("petclinic-ignite-grid"),相同的网格中,则将创建一个IMDG。请注意,具有此版本的分区、嵌入式分布式缓存的2个服务实例应该能够通过所需的端口相互通信。请参考数据网格了解更多详细信息。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35017564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档