hazelcast java_JVM内存级分布式缓存Hazelcast

本文介绍了Hazelcast作为一个内存分布式计算平台,用于管理数据并行执行应用程序。它是一个用Java编写的多线程内存数据库,支持无限数量的map和缓存,比Redis更快。Hazelcast提供了多种分布式数据结构和操作,如分布式Map、锁、ExecutorService等,并具有高可扩展性和故障恢复能力。示例展示了如何在SpringBoot中配置和使用Hazelcast进行分布式缓存。
摘要由CSDN通过智能技术生成

Hazelcast是一个内存分布式计算平台,用于管理数据并并行执行执行应用程序。

1. 它是用Java编写的。

2. 与其他一些内存数据库(如redis)不同,Hazelcast是多线程的,这意味着可从所有可用的CPU内核中受益。

3. 与其他内存数据网格不同 - 它设计用于分布式环境。它支持每个群集无限数量的map和缓存。

根据基准测试,Hazelcast在获取数据方面比Redis快56%,在设置数据方面比Redis快44%。

Hazelcast是一个高度可扩展的数据分发和集群平台。特性包括:

提供java.util.{Queue, Set, List, Map}分布式实现。

提供java.util.concurrency.locks.Lock分布式实现。

提供java.util.concurrent.ExecutorService分布式实现。

提供用于一对多关系的分布式MultiMap。

提供用于发布/订阅的分布式Topic(主题)。

通过JCA与J2EE容器集成和事务支持。

提供用于安全集群的Socket层加密。

支持同步和异步持久化。

通过JMX监控和管理集群。

支持动态HTTP Session集群。

利用备份实现动态分割。

支持动态故障恢复。

我们来看一下如何使用Hazelcast

pom

com.hazelcasthazelcast-all3.10.1

在SpringBoot主程序开启缓存@EnableCaching

@EnableCaching@EnableFeignClients@EnableDiscoveryClient@EnableTransactionManagement@SpringBootApplicationpublic classProductproviderApplication {

public static voidmain(String[] args) {

ApplicationContext app = SpringApplication.run(ProductproviderApplication.class,args);SpringBootUtil.setApplicationContext(app);}

}

配置类

@Configurationpublic classHazelcastConfiguration {

@BeanpublicConfig hazelCastConfig(){

Config config = newConfig();config.setInstanceName("hazelcast-instance").addMapConfig(

newMapConfig().setName("configuration").setMaxSizeConfig(newMaxSizeConfig(200,MaxSizeConfig.MaxSizePolicy.FREE_HEAP_SIZE)).setEvictionPolicy(EvictionPolicy.LFU)

.setTimeToLiveSeconds(-1));returnconfig;}

}

还是以昨天的汽车配件分类实体类来说明,此处注意一定要实现序列化接口Serializable

@AllArgsConstructor@NoArgsConstructorpublic classProviderProductLevel implementsProvider,Serializable {

@Getter@SetterprivateLong id;@Getter@SetterprivateString code;@Getter@SetterprivateString name;@Getter@SetterprivateInteger sort;@Getter@SetterprivateInteger level;@Getter@SetterprivateProductType productType;@Getter@SetterprivateString pictureUrl;@Getter@SetterprivateList otherProperties;@GetterprivateList productListProviders= newCopyOnWriteArrayList<>();

publicProviderProductLevel(Long id,String code,String name,Integer sort,ProductType productType) {

this.id= id;this.code= code;this.name= name;this.sort= sort;this.level= 1;this.productType= productType;}

publicProviderProductLevel(Long id,String code,String name,Integer sort,String pictureUrl) {

this.id= id;this.code= code;this.name= name;this.sort= sort;this.level= 2;this.pictureUrl= pictureUrl;}

@Overridepublic booleanaddProvider(Provider provider) {

LevelDao levelDao = SpringBootUtil.getBean(LevelDao.class);if(provider instanceofProviderProductLevel) {

levelDao.addLevelToLevel(newParamLevel(this.id,((ProviderProductLevel)provider).getId()));}

return this.productListProviders.add(provider);}

}

写一个Controller,其中建立分布式缓存Map,不相关的内容不做解释,只说明分布式缓存内容

@Slf4j@RestControllerpublic classLevelController {

//创建分布式缓存节点privateHazelcastInstance instance= Hazelcast.newHazelcastInstance();@AutowiredprivateLevelDao levelDao;//一级分类缓存// private Map cachelevelMap1 = new ConcurrentHashMap<>();privateMap cachelevelMap1= instance.getMap("level1");

/*** 保存一级汽车配件分类*@paramlevel*@return*/@ProductAnnotation@SuppressWarnings("unchecked")

@Transactional@PostMapping("/productprovider-anon/savelevel1")

publicResult saveLevel1(@RequestBodyProviderProductLevel level) {

ProviderFactory.createProviderProductLevel1(level,true);if(!cachelevelMap1.containsKey(level.getId())) {

cachelevelMap1.put(level.getId(),level);}

returnResult.success("保存成功");}

/*** 保存二级汽车配件分类,并将二级产品分类添加到一级产品分类的子分类*@paramid*@paramlevel*@return*/@SuppressWarnings("unchecked")

@Transactional@PostMapping("/produ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分布式缓存在微服务架构中起着重要的作用。它可以提高系统的性能、可扩展性和可靠性。下面是关于微服务中分布式缓存的一些常见问题和答案: 1. 什么是分布式缓存分布式缓存是指将缓存数据存储在多个节点上,以提供更高的性能和可扩展性。它可以减少对底层数据源的访问次数,从而提高系统的响应时间。 2. 为什么在微服务架构中使用分布式缓存? 在微服务架构中,每个微服务都是相互独立的,拥有自己的数据存储。使用分布式缓存可以将共享的数据存储在缓存中,减少对微服务之间的数据传输和数据库访问的依赖,提高系统的性能和可扩展性。 3. 哪些场景适合使用分布式缓存分布式缓存适用于那些读取频率高、计算代价高、数据变化不频繁的场景。例如,用户信息、商品信息、配置信息等可以存储在分布式缓存中,以减少对数据库的访问次数。 4. 常见的分布式缓存系统有哪些? 常见的分布式缓存系统包括Redis、Memcached、Hazelcast等。它们提供了高速的内存存储和读取能力,并支持分布式部署和数据复制。 5. 如何使用分布式缓存? 使用分布式缓存需要考虑数据一致性和缓存更新的问题。可以使用缓存策略、缓存失效机制和更新通知等方式来管理缓存数据的一致性,并定期清理过期的缓存数据。 6. 分布式缓存有哪些挑战? 分布式缓存面临的挑战包括缓存一致性、缓存雪崩、缓存击穿和缓存穿透等问题。需要通过合适的缓存策略和技术手段来应对这些挑战。 希望以上信息对你有所帮助!如果还有其他问题,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值