重学SpringBoot3-集成Redis(一)

news2024/11/26 22:47:29

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》
期待您的点赞👍收藏⭐评论✍

重学SpringBoot3-集成Redis(一)

  • 1. 项目初始化
  • 2. 配置 Redis
  • 3. 配置 Redis 序列化
  • 4. 操作 Redis 工具类
  • 5. 编写 REST 控制器
  • 6. 测试 API
  • 7. 总结

随着 Spring Boot 3 的发布,开发者可以享受更多的功能提升和性能优化。在现代开发中,Redis 作为高性能的缓存数据库,被广泛应用于提高系统的响应速度和减少数据库的压力。本文将介绍如何通过 Spring Boot 3 来整合 Redis,实现缓存和存储功能。

1. 项目初始化

可以通过 Spring Initializr 创建一个新的 Spring Boot 项目,选择 Spring Boot 3,并设置项目 JDK 为 Java 17。需要添加以下依赖:

  • Spring Web:用于构建 REST API。
  • Spring Data Redis:用于 Redis 数据库的操作。
  • Lettuce:Redis 客户端,Spring Boot 默认支持。
  • Spring Boot DevTools(可选):方便开发时进行热部署。

选择好依赖后,点击 “Generate” 下载项目模板。

Spring Initializr创建项目

2. 配置 Redis

首先,需要在本地或远程部署 Redis 服务器。如果使用的是 Docker,可以用以下命令快速启动 Redis,如果是 Redis 集群请参考Docker搭建Redis集群模式。

docker run --name redis -p 6379:6379 -d redis

项目创建后,打开 application.yml 文件,如果是单机版 Redis 服务,添加如下 Redis 配置:

spring:
  data:
    redis:
      host: localhost
      port: 6379            # Redis 端口
      password:             # 如果有密码可以在这里配置
      lettuce:
        pool:
          max-active: 100    # 最大并发连接数
          max-idle: 50       # 最大空闲连接数
          min-idle: 10       # 最小空闲连接数

如果是集群版 Redis 服务,修改为如下 Redis 配置:

spring:
  data:
    redis:
      cluster:
        nodes:
          - 127.0.0.1:6379
          - 127.0.0.2:6379
          - 127.0.0.3:6379
      password:             # 如果有密码可以在这里配置
      lettuce:
        pool:
          max-active: 100    # 最大并发连接数
          max-idle: 50       # 最大空闲连接数
          min-idle: 10       # 最小空闲连接数

3. 配置 Redis 序列化

Spring Boot 默认使用 JdkSerializationRedisSerializer 进行序列化,而我们通常更倾向于使用 StringRedisSerializerJackson2JsonRedisSerializer 进行更高效的序列化操作,尤其是在处理 JSON 数据时。

我们可以通过配置 RedisTemplate 来使用自定义的序列化器:

package com.coderjia.boot310redis.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * @author CoderJia
 * @create 2024/10/4 下午 12:43
 * @Description
 **/
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);

        // 使用String序列化器序列化Key
        template.setKeySerializer(new StringRedisSerializer());

        // 使用Jackson2JsonRedisSerializer序列化Value
        ObjectMapper objectMapper = new ObjectMapper();
        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(objectMapper,Object.class);
        template.setValueSerializer(serializer);

        return template;
    }
}

4. 操作 Redis 工具类

接下来,我们可以创建一个简单的工具类来操作 Redis。我们将通过 RedisTemplate 对象进行数据的存取操作。

package com.coderjia.boot310redis.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

/**
 * @author CoderJia
 * @create 2024/10/4 下午 12:48
 * @Description
 **/
@Service
public class RedisUtils {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    // 保存数据
    public void save(String key, Object value) {
        redisTemplate.opsForValue().set(key, value, 10, TimeUnit.MINUTES);  // 设置数据的有效期为10分钟
    }

    // 获取数据
    public Object get(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    // 删除数据
    public void delete(String key) {
        redisTemplate.delete(key);
    }
}

5. 编写 REST 控制器

为了展示如何通过 REST API 来操作 Redis,我们可以创建一个简单的控制器,通过 GET 和 POST 请求来存取 Redis 中的数据。

package com.coderjia.boot310redis.demos.web;

import com.coderjia.boot310redis.utils.RedisUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author CoderJia
 */
@RestController
@RequestMapping("/api/redis")
public class BasicController {

    @Autowired
    private RedisUtils redisUtils;

    // 保存数据
    @PostMapping("/save")
    public String save(@RequestParam("key") String key, @RequestParam("value") String value) {
        redisUtils.save(key, value);
        return "Data saved successfully!";
    }

    // 获取数据
    @GetMapping("/get")
    public Object get(@RequestParam("key") String key) {
        Object value = redisUtils.get(key);
        return value != null ? value : "Key not found";
    }

    // 删除数据
    @DeleteMapping("/delete")
    public String delete(@RequestParam("key") String key) {
        redisUtils.delete(key);
        return "Data deleted successfully!";
    }
}

6. 测试 API

启动 Spring Boot 应用程序,使用 curl 或 Postman 测试 API:

保存数据

curl -X POST "http://localhost:8080/api/redis/save?key=testKey&value=helloRedis"

保存数据

获取数据

curl "http://localhost:8080/api/redis/get?key=testKey"

获取数据

删除数据

curl -X DELETE "http://localhost:8080/api/redis/delete?key=testKey"

删除数据

7. 总结

通过本文,相信你已经学会了如何在 Spring Boot 3Java 17 中整合 Redis,并实现基本的存取操作以及缓存功能。使用 Redis 可以大大提升应用的响应速度和性能,尤其在高并发的场景中,使用 Redis 作为缓存是一个非常有效的优化手段。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【复习】html最重要的表单和上传标签

文章目录 imgforminput img <img src"https://tse1-mm.cn.bing.net/th/id/OIP-C._XVJ53-pN6sDMXp8W19F4AAAAA?rs1&pidImgDetMain"alt"二次元"height"350px"width"200px"/>常用 没啥说的&#xff0c;一般操作css多一些 for…

Nacos理论知识+应用案例+高级特性剖析

一、理论知识 Nacos功能 Nacos常用于注册中心、配置中心 Nacos关键特性 1、服务发现和服务健康监测 nacos作为服务注册中心可用于服务发现,并支持传输层&#xff08;TCP&#xff09;和应用层(HTTP&#xff09;的健康检查&#xff0c;并提供了agent上报和nacos server端主动…

数据结构——List接口

文章目录 一、什么是List&#xff1f;二、常见接口介绍三、List的使用总结 一、什么是List&#xff1f; 在集合框架中&#xff0c;List是一个接口&#xff0c;通过其源码&#xff0c;我们可以清楚看到其继承了Collection。 Collection 也是一个接口&#xff0c;该接口中规范了后…

启动redis

1. 进入root的状态&#xff0c;sudo -i 2. 通过sudo find /etc/redis/ -name "redis.conf"找到redis.conf的路径 3. 切换到/etc/redis目录下&#xff0c;开启redis服务 4. ps aux | grep redis命令查看按当前redis进程&#xff0c;发现已经服务已经开启 5.关闭服务…

如何使用WPS软件里的AI工具?

在wps文档中随机位置&#xff0c;按两下键盘上的【CTRL】键&#xff0c;唤醒AI工具 然后&#xff0c;输入想要的问题后&#xff0c;按下【回车】&#xff0c;就会生成答案在文档中 如果答案是自己喜欢的&#xff0c; 则选择【保留】&#xff0c;即可保存在文档中 如果答案不是…

Arthas(阿尔萨斯)

Arthas Arthas可以为你做什么&#xff1f; 安装下载 //Linux环境下 wget https://alibaba.github.io/arthas/arthas-boot.jar //Windows环境下可以直接去官网下载压缩包 https://arthas.aliyun.com/doc/download.html//启动命令 java -jar arthas-boot.jar 启动阿尔萨斯&#…

使用Conda管理python环境的指南

1. 准备 .yml 文件 确保你有一个定义了 Conda 环境的 .yml 文件。这个文件通常包括环境的依赖和配置设置。文件内容可能如下所示&#xff1a; name: myenv channels:- defaults dependencies:- python3.8- numpy- pandas- scipy- pip- pip:- torch- torchvision- torchaudio2…

【我的 PWN 学习手札】tcache stash unlink

目录 前言 一、相关源码 二、过程图示 1. Unlink 过程 2. Tcache stash unlink 过程 三、测试与模板 1. 流程实操 2. 相关代码 前言 tcache stashing unlink atttack 主要利用的是 calloc 函数会绕过 tcache 从smallbin 里取出 chunk 的特性。并且 smallbin 分配后&…

IP 数据包分包组包

为什么要分包 由于数据链路层MTU的限制,对于较⼤的IP数据包要进⾏分包. 什么是MTU MTU相当于发快递时对包裹尺⼨的限制.这个限制是不同的数据链路对应的物理层,产⽣的限制. • 以太⽹帧中的数据⻓度规定最⼩46字节,最⼤1500字节,ARP数据包的⻓度不够46字节,要在后⾯补填 充…

【ONE·Web || HTML】

总言 主要内容&#xff1a;HTML基本知识入门&#xff0c;主要介绍了常见的一些标签使用&#xff0c;以及简单案例演示。       文章目录 总言0、前置说明1、认识HTML1.1、是什么1.2、初识 HTML 标签、HTML 文件基本结构1.2.1、相关说明1.2.2、vscode如何快速生成代码 2、HT…

实时数仓分层架构超全解决方案

传统意义上的数据仓库主要处理T1数据&#xff0c;即今天产生的数据分析结果明天才能看到&#xff0c;T1的概念来源于股票交易&#xff0c;是一种股票交易制度&#xff0c;即当日买进的股票要到下一个交易日才能卖出。 随着互联网以及很多行业线上业务的快速发展&#xff0c;让…

【精】Java编程中的Lambda表达式与Stream API

一、引言 随着Java 8的发布&#xff0c;引入了许多令人兴奋的新特性&#xff0c;其中最引人注目的就是Lambda表达式和Stream API。这些新功能不仅让Java这门语言更加现代化&#xff0c;而且也极大地提高了开发效率&#xff0c;使代码更加简洁、易读。本文将深入探讨Lambda表达…

Rust 做桌面应用这么轻松?Pake 彻底改变你的开发方式

Rust 做桌面应用这么轻松&#xff1f;Pake 彻底改变你的开发方式 网页应用装不下了&#xff1f;别担心&#xff0c;Pake 用 Rust 帮你打包网页&#xff0c;快速搞定桌面应用。比起动不动就 100M 的 Electron 应用&#xff0c;它轻如鸿毛&#xff0c;功能却一点都不少&#xff0…

案例-任务清单

文章目录 效果展示初始化面演示画面 代码区 效果展示 初始化面 演示画面 任务清单 代码区 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, in…

Linux下的IO模型

阻塞与非阻塞IO&#xff08;Input/Output&#xff09; 阻塞与非阻塞IO&#xff08;Input/Output&#xff09;是计算机操作系统中两种不同的文件或网络通信方式。它们的主要区别在于程序在等待IO操作完成时的行为。 阻塞IO&#xff08;Blocking IO&#xff09; 在阻塞IO模式下…

付费计量系统通用功能(13)

11.17 Class 17: Security function Capability of maintaining the integrity of data elements, functions and processes. 数据单元、功能和过程的可靠性 Maintains the integrity of the system.系统的可靠 Some examples of security function at…

Meta推出Movie Gen 旗下迄今最先进的视频生成AI模型

Meta 今天发布了 MovieGen 系列媒体基础AI模型&#xff0c;该模型可根据文本提示生成带声音的逼真视频。 MovieGen 系列包括两个主要模型&#xff1a; MovieGen Video 和 MovieGen Audio。 MovieGen Video 是一个具有 300 亿个参数的变换器模型&#xff0c;可根据单个文本提示生…

一“填”到底:深入理解Flood Fill算法

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 floodfill算法是什么&#xff1f; 二 相关OJ题练习 2.1 图像渲染 2.2 岛屿数量 2.3 岛屿的最大面积 2.4 被围绕的区域 2.5 太平洋大西洋水流问题 2.6 扫雷游戏 2.7 衣橱整…

数据科学:Data+AI驾驭数据的智慧之旅

数据科学&#xff1a;DataAI驾驭数据的智慧之旅 前言一、数据存储计算二、数据治理三、结构化数据分析四、语音分析五、视觉分析六、文本分析七、知识图谱 前言 今天想和大家深入聊聊数据科学这个充满魅力又极具挑战的领域。在当今数字化时代&#xff0c;数据如同潮水般涌来&a…

掌握这一招,轻松用Vue和ECharts打造炫酷雷达图——详细教程指南

大家好&#xff0c;今天我要分享的是如何使用ECharts来绘制雷达图。雷达图是一种常用的数据可视化工具&#xff0c;特别适合展示多个量化指标的比较&#xff0c;也可以进行多维度用户行为分析。接下来&#xff0c;我将一步步教大家如何通过ECharts来实现这一效果。效果图如下&a…