千家信息网

spring boot与内存数据库Hazelcast整合是怎样的

发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,本篇文章为大家展示了spring boot与内存数据库Hazelcast整合是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前言spring boot
千家信息网最后更新 2025年02月22日spring boot与内存数据库Hazelcast整合是怎样的

本篇文章为大家展示了spring boot与内存数据库Hazelcast整合是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

前言

spring boot 在此就不多做介绍了,想来大家对他应该都不陌生了

Hazelcast 可能大家就毕竟陌生了:

  • 简单易用
    Hazelcast是用Java编写的,没有其他依赖关系。只需简单的把jar包引入项目的classpath即可创建集群。

  • 无主从模式
    与许多NoSQL解决方案不同,Hazelcast节点是点对点的。没有主从关系; 所有成员都存储相同数量的数据,并进行相等的处理,避免了单点故障。

  • 弹性可扩展
    Hazelcast旨在扩展成千上万的成员。新成员启动,将自动发现群集,并线性增加存储和处理能力。成员之间通过TCP保持连接和通讯。

  • 读写快速高效
    Hazelcast所有数据都存储在内存中,提供基于内存快速高效的读写能力。

PS:另外就是--根据基准测试,Hazelcast在获取数据方面比Redis快56%,在设置数据方面比Redis快44%。

用例

下面主要是讲讲springboot和Hazelcast的整合,并给出Hazelcast支持的数据类型MAP、List、Topic、Queue给出了使用实例。

整合配置:

@Configurationpublic class HazelcastConfig {        @Bean        public Config config() {                Config config = new Config();                GroupConfig gc=new GroupConfig(Const.HAZELCAST_NAME);//解决同网段下,不同库项目                                config.setInstanceName("hazelcast-instance")                                .addMapConfig(new MapConfig().setName("configuration")                                .setMaxSizeConfig(new MaxSizeConfig(2000, MaxSizeConfig.MaxSizePolicy.FREE_HEAP_SIZE))                                .setEvictionPolicy(EvictionPolicy.LRU).setTimeToLiveSeconds(-1))                                .setGroupConfig(gc);                return config;        }                @Bean        public HazelcastInstance hazelcastInstance(Config config) {                HazelcastInstance hzInstance = Hazelcast.newHazelcastInstance(config);                 //分布式map监听                IMap imap = hzInstance.getMap(Const.MAP_NAME);                imap.addLocalEntryListener(new IMapListener());                //拦截器(没写内容)                imap.addInterceptor(new IMapInterceptor());                //发布/订阅模式                ITopic topic = hzInstance.getTopic(Const.TOPIC_NAME);                 topic.addMessageListener(new TopicListener());                                return hzInstance;        }}

map数据变化的拦截器实现:

public class IMapInterceptor implements MapInterceptor{        private static final long serialVersionUID = 3556808830046436753L;        @Override        public Object interceptGet(Object value) {                // TODO Auto-generated method stub                return null;        }        @Override        public void afterGet(Object value) {                // TODO Auto-generated method stub                        }        @Override        public Object interceptPut(Object oldValue, Object newValue) {                // TODO Auto-generated method stub                return null;        }        @Override        public void afterPut(Object value) {                // TODO Auto-generated method stub                        }        @Override        public Object interceptRemove(Object removedValue) {                // TODO Auto-generated method stub                return null;        }        @Override        public void afterRemove(Object oldValue) {                // TODO Auto-generated method stub                        }}

map数据变化的监听器实现:

public class IMapListener implements EntryAddedListener{        @Override        public void entryAdded(EntryEvent event) {                // TODO Auto-generated method stub                //干你监听的操作                System.out.println("MAP分布式监听:"+event.getValue());        }}

Topic订阅接收消息:

public class TopicListener implements MessageListener {                @Override        public void onMessage(Message message) {                String msg=message.getMessageObject();                System.out.println("收到Topic消息:"+msg);        }}

List和Queue的实例

这两个我就没写在实际代码中,在test写了2个main方法

//生产数据public class HazelcastGetStartServerMaster {    public static void main(String[] args) {        // 创建一个 hazelcastInstance实例        HazelcastInstance instance = Hazelcast.newHazelcastInstance();        // 创建集群Map        IList clusterMap = instance.getList("myList");        clusterMap.add("list0");        clusterMap.add("list1");        // 创建集群Queue        Queue clusterQueue = instance.getQueue("MyQueue");        clusterQueue.offer("Hello hazelcast!");        clusterQueue.offer("Hello hazelcast queue!");    }}
//消费数据public class HazelcastGetStartServerSlave {    public static void main(String[] args) {        //创建一个 hazelcastInstance实例        HazelcastInstance instance = Hazelcast.newHazelcastInstance();        IList clusterList = instance.getList("myList");        Queue clusterQueue = instance.getQueue("MyQueue");                System.out.println("Map Value:" + clusterList.get(1));        System.out.println("Queue Size :" + clusterQueue.size());        System.out.println("Queue Value 1:" + clusterQueue.poll());        System.out.println("Queue Value 2:" + clusterQueue.poll());        System.out.println("Queue Size :" + clusterQueue.size());    }}

这个时候启动项目显示如下:

当前只有一个节点,端口为:5701

这个时候写个main方法测试分布式map:

public class IMapTest {        public static void main(String[] args) {                Config config = new Config();                GroupConfig gc=new GroupConfig(Const.HAZELCAST_NAME);                config.setGroupConfig(gc);                HazelcastInstance hzInstance = Hazelcast.newHazelcastInstance(config);                                 IMap imap = hzInstance.getMap(Const.MAP_NAME);                imap.put("myKey", "myObject");    }}

运行main方法发现原来启动的项目找那个Member变成了2个,因为main方法中也启动了一个Hazelcast实例加入了集群中。imap的拦截器,我监听器都生效了。并获取到了main方法中加的数据,因为Hazelcast是集群的,数据可以在许多应用程序实例之间共享。

上述内容就是spring boot与内存数据库Hazelcast整合是怎样的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

0