重学SpringBoot3-集成Hazelcast

在这里插入图片描述

重学SpringBoot3-集成Hazelcast

  • 1. Hazelcast 的作用
  • 2. Spring Boot 3 整合 Hazelcast 的步骤
    • 2.1 添加 Hazelcast 依赖
    • 2.2 配置 Hazelcast 实例
  • 3. 集成 Hazelcast 与 Spring Boot 缓存
  • 4. 验证 Hazelcast 缓存
  • 5. Hazelcast 集群配置
  • 6. 总结

Hazelcast 是一个流行的开源内存数据网格平台,可以用于分布式数据存储、缓存、会话管理和流处理。它具备水平扩展能力,并提供内存数据存储的高性能。通过将 Hazelcast 与 Spring Boot 3 结合,可以让开发者轻松实现分布式缓存、数据共享、会话管理等功能。

在这篇博客中,我们将详细介绍如何将 Hazelcast 整合到 Spring Boot 3 应用中,并探讨 Hazelcast 在分布式环境中的作用和优势。

1. Hazelcast 的作用

在分布式系统中,数据的一致性、可用性和性能至关重要。Hazelcast 通过其内存数据网格(IMDG)的特性,提供了一种集成式的解决方案:

  1. 分布式缓存:Hazelcast 可作为一个高性能的缓存系统,将经常访问的数据存储在内存中,减少数据库访问,提升应用性能。
  2. 会话管理:它支持分布式会话管理,在多实例的微服务环境中,可以将用户的会话信息存储到 Hazelcast 中,确保用户在不同实例之间的会话一致性。
  3. 分布式数据存储:Hazelcast 允许你将数据分布在多个节点中,这有助于实现数据的高可用性和容错性。
  4. 集群管理:Hazelcast 支持动态集群管理,节点可以随时加入或离开集群,而不会影响系统的稳定性。
  5. 分布式锁:在分布式环境中,可以通过 Hazelcast 实现分布式锁,用于防止数据竞争问题。

接下来,我们将介绍如何将 Hazelcast 与 Spring Boot 3 进行整合,打造高效的分布式缓存应用。

2. Spring Boot 3 整合 Hazelcast 的步骤

2.1 添加 Hazelcast 依赖

首先,你需要在项目的 pom.xml 中添加 Hazelcast 相关的依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.hazelcast</groupId>
            <artifactId>hazelcast</artifactId>
            <version>5.3.0</version>
        </dependency>

        <dependency>
            <groupId>com.hazelcast</groupId>
            <artifactId>hazelcast-spring</artifactId>
            <version>5.3.0</version>
        </dependency>

hazelcast-spring 提供了与 Spring 框架的集成支持。

2.2 配置 Hazelcast 实例

Hazelcast 可以通过 XML 或 Java 配置文件进行配置。为了简单起见,我们使用 Java 配置方式创建一个默认的 Hazelcast 配置实例:

import com.hazelcast.config.Config;
import com.hazelcast.config.MapConfig;
import com.hazelcast.config.EvictionPolicy;
import com.hazelcast.config.MaxSizePolicy;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.Hazelcast;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HazelcastConfig {

    @Bean
    public HazelcastInstance hazelcastInstance() {
        Config config = new Config();
        
        // 配置分布式 Map
        MapConfig mapConfig = new MapConfig();
        mapConfig.setName("my-distributed-map");
        mapConfig.setMaxSizeConfig(new MapConfig.MaxSizeConfig(200, MaxSizePolicy.FREE_HEAP_SIZE));
        mapConfig.setEvictionPolicy(EvictionPolicy.LRU);  // 最近最少使用策略
        mapConfig.setTimeToLiveSeconds(60);  // 设置 TTL 为 60 秒

        config.addMapConfig(mapConfig);
        return Hazelcast.newHazelcastInstance(config);  // 启动 Hazelcast 实例
    }
}

在这个配置中,我们创建了一个名为 my-distributed-map 的 Hazelcast 分布式 Map,并设置了以下配置:

  • 最大大小:设置了缓存的最大堆内存使用量。
  • 驱逐策略:使用 LRU(最近最少使用)策略来决定缓存对象的移除。
  • 生存时间:设置每个缓存对象的 TTL 为 60 秒。

3. 集成 Hazelcast 与 Spring Boot 缓存

接下来,我们需要启用 Spring 的缓存功能,并使用 Hazelcast 作为缓存提供者。为此,我们可以使用 Spring Boot 的注解驱动缓存功能。

首先,启用缓存功能:

import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableCaching
public class CacheConfig {
    // Hazelcast 已在 HazelcastConfig 中配置,无需额外操作
}

然后,你可以使用 Spring 的缓存注解来在你的服务层启用缓存。以下是一个示例:

package com.coderjia.boot317hazelcast.service;

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

/**
 * @author CoderJia
 * @create 2024/10/23 下午 10:45
 * @Description
 **/
@Service
public class ProductService {

    @Cacheable(value = "my-distributed-map", key = "#id")
    public String getProductById(Long id) {
        // 模拟获取数据的耗时操作
        try {
            System.out.println("从数据库查数据id:" + id);
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        return "Product-" + id;
    }
}

这里,@Cacheable 注解指定了缓存的名称 my-distributed-map,并且指定 id 作为缓存的键。在第一次调用 getProductById() 时,方法的结果将被缓存。随后的相同 ID 调用将直接从 Hazelcast 缓存中获取结果,而不会再次执行耗时操作。

4. 验证 Hazelcast 缓存

启动 Spring Boot 应用后,你可以通过调用 ProductService 来验证缓存是否生效。

package com.coderjia.boot317hazelcast.controller;

import com.coderjia.boot317hazelcast.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author CoderJia
 * @create 2024/10/23 下午 10:45
 * @Description
 **/
@RestController
public class Controller {

    @Autowired
    private ProductService productService;

    @GetMapping("/test")
    public void testCache() {
        // 第一次调用,触发实际方法执行
        System.out.println(productService.getProductById(1L));

        // 第二次调用,应该从缓存中获取结果
        System.out.println(productService.getProductById(1L));
    }
}

你会发现第二次调用时,结果会立即返回,而不会再有耗时操作。

启动成功

第一次调接口:

第一次调用

第二次调接口,此时缓存还在有效期中。

第二次调用

5. Hazelcast 集群配置

Hazelcast 的强大之处在于其原生支持集群。在多实例的微服务环境中,Hazelcast 实例可以自动发现并组成集群,实现数据的共享和同步。可以通过以下方式启用集群配置:

@Bean
public HazelcastInstance hazelcastInstance() {
    Config config = new Config();
    config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(true);  // 启用多播发现
    return Hazelcast.newHazelcastInstance(config);
}

当多个 Hazelcast 实例在同一网络中运行时,它们会自动发现并组成集群,提供高可用性和负载均衡。

6. 总结

在这篇文章中,我们介绍了如何将 Hazelcast 集成到 Spring Boot 3 中,并展示了它作为分布式缓存的用法。Hazelcast 的优势包括分布式缓存、会话管理、数据共享和分布式锁等功能,非常适合在微服务环境中使用。

Hazelcast 的作用总结:

  1. 分布式缓存:缓存常用数据,减轻数据库压力,提高性能。
  2. 会话管理:在多实例环境中管理用户会话,实现会话共享。
  3. 数据共享:在分布式系统中共享数据,实现高可用性和容错性。
  4. 分布式锁:实现分布式系统中的并发控制。

通过 Hazelcast,我们可以轻松构建高性能、高可用的分布式应用。未来可以进一步探索 Hazelcast 的更多特性,比如分布式事件处理、分布式集合和流处理等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/899184.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux重点yum源配置

1.配置在线源 2.配置本地源 3.安装软件包 4.测试yum源配置 5.卸载软件包

浅谈人工智能之基于阿里云使用vllm搭建Llama3

浅谈人工智能之基于阿里云使用vllm搭建Llama3 引言 随着人工智能技术的迅速发展&#xff0c;Llama3作为一个先进的语言模型&#xff0c;受到广泛关注。本文将介绍如何在阿里云上使用VLLM搭建Llama3&#xff0c;为用户提供一套完整的技术流程。 环境准备 阿里云账户 确保您…

记录:网鼎杯2024赛前热身WEB01

目录扫描&#xff0c;发现上传点&#xff0c;判断可能存在文件上传漏洞&#xff0c;并根据文件后缀判断网站开发语言为php 编写蚁剑一句话木马直接上传 蚁剑连接 这里生成 的flag是随机的&#xff0c;因为烽火台反作弊会随机生成环境&#xff0c;在一顿查找后&#xff0c;在hom…

【部署篇】RabbitMq-03集群模式部署

一、准备主机 准备3台主机用于rabbitmq部署&#xff0c;文章中是在centos7上安装部署rabbitmq3.8通过文章中介绍的方式可以同样在centos8、centos9上部署&#xff0c;只需下载对应的版本进行相同的操作。 主机IP角色说明192.168.128.31种子节点192.168.128.32普通节点192.16…

【达梦数据库】两台或多台服务器之间免密登录设置-【dmdba用户】

目录 背景1、服务器A免密登录本机1.1、生成私钥&#xff08;id_rsa&#xff09;和公钥&#xff08;id_rsa.pub&#xff09;1.2、追加公钥到服务器A的密码登录权限管理文件1.3、结果验证 2、服务器A免密登录服务器B2.1、确认服务器B有目的文件夹2.2、服务器A的公钥复制到服务器B…

网安加·百家讲坛 | 徐一丁:金融机构网络安全合规浅析

作者简介&#xff1a;徐一丁&#xff0c;北京小西牛等保软件有限公司解决方案部总监&#xff0c;网络安全高级顾问。2000年开始从事网络安全工作&#xff0c;主要领域为网络安全法规标准研究、金融行业安全咨询与解决方案设计、信息科技风险管理评估等。对国家网络安全法规标准…

react18中的合成事件与浏览器中的原生事件

React 通过将事件 normalize 以让他们在不同浏览器中拥有一致的属性。 合成事件 SyntheticEvent 实例将被传递给你的事件处理函数&#xff0c;它是浏览器的原生事件的跨浏览器包装器。除兼容所有浏览器外&#xff0c;它还拥有和浏览器原生事件相同的接口&#xff0c;包括 stopP…

项目文章 | 药学TOP期刊PRChIP-seq助力揭示激酶LIMK2促进梗死不良重构的机制

急性心肌梗死&#xff08;MI&#xff09;是全球死亡的主要原因&#xff0c;尽管MI的死亡率有所下降&#xff0c;缺血性心力衰竭的发病率却呈上升趋势。这一现象提示我们&#xff0c;尽管在急救和治疗急性心肌梗死方面取得了进展&#xff0c;但心脏在梗死后的长期功能恢复仍然是…

Pr 视频效果:自动重构

视频效果/变换/自动重构 Transform/Auto Reframe 自动重构 Auto Reframe效果是用于快速调整视频素材以适应不同长宽比的一项强大工具。 随着各种平台和设备的多样化&#xff0c;视频内容需要适应不同的屏幕尺寸和比例&#xff0c;如 16:9&#xff08;横屏&#xff09;、9:16&am…

「Qt Widget中文示例指南」如何实现半透明背景?

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文将为大家展示如…

新鲜出炉,ECCV2024.9.25 首次提出基于 YOLO 目标检测的无源域自适应

原文标题&#xff1a;Source-Free Domain Adaptation for YOLO Object Detection 中文标题&#xff1a;基于 YOLO 目标检测的无源域自适应 论文地址&#xff1a; https://arxiv.org/abs/2409.16538 代码地址&#xff1a; GitHub - vs-cv/sf-yolo 1、Abstract 无源域自适应&…

单细胞 | 转录因子足迹分析

数据加载 在本案例中&#xff0c;将采用之前在轨迹构建案例中已经介绍并处理过的数据集。 library(Signac)library(Seurat)bone <- readRDS("cd34.rds")DimPlot(bone, label TRUE) 要执行足迹分析&#xff0c;必须首先向对象中添加Motif 信息&#xff0c;这包括每…

微软发布 Win11 22H2/23H2 十月可选更新KB5044380!

系统之家于10月23日发出最新报道&#xff0c;微软针对Win11 22H2和23H2用户&#xff0c;发布了10月可选更新KB5044380&#xff0c;用户安装后版本号升至22621.4391和22631.4391。本次更新开始推出屏幕键盘的新游戏板键盘布局&#xff0c;支持用户使用Xbox控制器在屏幕上移动和键…

Burp Suite基本介绍

Burp Suite基本介绍 官网&#xff1a;https://portswiggernet Burp的作用 目标: 用于渗透测试&#xff0c;发现漏洞手段:拦截HTTP数据、对数据进行分析和处理&#xff0c;漏洞扫描场景:测试SQL注入、文件上传、XSS、CSRF、FUZZ、重放攻击、密码暴破、爬取数据、逻辑漏洞... …

Spring Boot论坛网站:安全特性与性能优化

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

word取消自动单词首字母大写

情况说明&#xff1a;在word输入单词后首字母会自动变成大写 &#xff08;1&#xff09;点击菜单栏文件 &#xff08;2&#xff09;点击“更多”——>“选项” &#xff08;3&#xff09;点击“校对”——>“自动更正选项” &#xff08;4&#xff09;取消“句首字母大写…

ubuntu22 安装labelimg制作自己的深度学习目标检测数据集

参考文章&#xff1a;目标检测---利用labelimg制作自己的深度学习目标检测数据集-CSDN博客 以上文章是windows下使用的方法&#xff0c;本章是在ubuntu22下使用的方法 一、准备工作 确保您的Ubuntu系统已安装Python 3.7或更高版本。可以通过在终端输入 python3 --version 来检…

kafka消息队列

kafka消息队列 什么是消息队列消息队列的应用场景异步处理应用耦合限流削峰消息驱动的系统 消息队列的两种模式点对点模式发布/订阅模式 常用的消息队列介绍PulsarPulsar 的特性Pulsar 存储架构Pulsar 消息消费 Kafka与Pulsar对比Pulsar 的主要优势&#xff1a;&#xff08;Pre…

海报在线制作系统小程序源码

海报在线制作系统小程序源码&#xff0c;是一款集功能性、实用性与便捷性于一体的创新工具。该小程序源码专为满足用户快速、高效制作各类海报的需求而设计&#xff0c;无需专业的设计技能或复杂的软件操作&#xff0c;即可轻松上手。 在功能性方面&#xff0c;这款海报小程序…

信息安全工程师(53)网络安全审计机制与实现技术

前言 网络安全审计机制是指为了保护网络安全并发现潜在风险和漏洞而进行的一系列审计活动。审计的目的是检查并评估网络系统的安全性&#xff0c;以确保其符合相关法律法规和安全标准。 一、网络安全审计机制的重要性 网络安全审计机制对于保护组织的信息资产和敏感数据至关重要…