Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
Redisson
是一个高性能的 Java Redis 客户端,提供了丰富的分布式工具集,如分布式锁、Map、Queue 等,帮助开发者简化 Redis 的操作。在集成 Redisson
到项目时,开发者通常有两种选择:
- 使用 Redisson 原始依赖。
- 使用 Redisson Spring Boot Starter。
这篇文章将详细介绍这两种集成方式的配置、使用场景以及它们的差异,帮助你更好地理解并选择合适的方案。
1. 使用 Redisson 原始依赖
Redisson 原始依赖的方式指的是直接使用 redisson
库,并自行配置 RedissonClient
来与 Redis 进行交互。这种方法适用于任何 Java 项目,包括 Spring、非 Spring 项目。
使用步骤
1.1 引入依赖
在 pom.xml
中添加 Redisson 依赖:
<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.16.5</version> <!-- 版本号可根据需求调整 -->
</dependency>
1.2 创建配置类并初始化 RedissonClient
手动定义 Config
对象,并创建 RedissonClient
实例:
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;public class RedisConfig {public RedissonClient createRedissonClient() {// 创建 Redisson 配置对象Config config = new Config();// 设置为单节点配置config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("yourPassword");// 创建 RedissonClient 实例return Redisson.create(config);}
}
1.3 使用 RedissonClient
在业务代码中使用 RedissonClient
:
public class RedissonExample {public static void main(String[] args) {RedisConfig redisConfig = new RedisConfig();RedissonClient redissonClient = redisConfig.createRedissonClient();// 使用 Redisson 获取分布式锁var lock = redissonClient.getLock("testLock");lock.lock();try {// 模拟业务逻辑System.out.println("Lock acquired and executing critical section.");} finally {lock.unlock();}}
}
特点
- 手动配置:手动定义
Config
对象并配置RedissonClient
,可以完全控制连接参数、池大小、超时等。 - 适用于非 Spring 环境:这种方式并不依赖 Spring,可以应用于任何 Java 项目。
- 灵活性强:可以根据具体需求实现自定义逻辑和配置。
使用场景
- 项目对 Spring 依赖不多,或完全不使用 Spring。
- 需要对
RedissonClient
的每个细节进行精细控制。
2. 使用 Redisson Spring Boot Starter
redisson-spring-boot-starter
是 Redisson
提供的用于与 Spring Boot 更好集成的模块,它提供了自动化的配置功能,使得 RedissonClient
的配置过程更加简洁。
使用步骤
2.1 引入依赖
在 pom.xml
中添加 redisson-spring-boot-starter
依赖:
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.16.5</version> <!-- 版本号可以根据需求调整 -->
</dependency>
2.2 在 application.yml
或 application.properties
中配置 Redis 信息
在 application.yml
中配置 Redis:
redisson:singleServerConfig:address: "redis://127.0.0.1:6379"password: "yourPassword"connectionPoolSize: 10connectionMinimumIdleSize: 2
2.3 使用 RedissonClient
自动注入
Spring Boot 会自动配置 RedissonClient
,因此你可以直接注入并使用它:
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class RedissonController {@Autowiredprivate RedissonClient redissonClient;@GetMapping("/lock")public String acquireLock() {var lock = redissonClient.getLock("testLock");lock.lock();try {// 模拟业务逻辑return "Lock acquired and critical section executed.";} finally {lock.unlock();}}
}
特点
- 自动化配置:
redisson-spring-boot-starter
能从 Spring Boot 配置文件中读取参数并自动创建RedissonClient
。 - 与 Spring Boot 紧密集成:无需手动管理
RedissonClient
,更加符合 Spring Boot 的自动化特性。 - 方便注入:可以通过
@Autowired
轻松地注入RedissonClient
,非常符合 Spring 的开发风格。
使用场景
- 使用 Spring Boot 项目,并且希望最大化利用 Spring Boot 的自动配置特性。
- 希望简化代码、减少配置工作量。
两种方式的对比
特性 | 原始 Redisson 依赖 | Redisson Spring Boot Starter |
---|---|---|
配置方式 | 手动创建 Config 和 RedissonClient | 使用 application.yml 自动配置 |
适用项目类型 | 任何 Java 项目,包括非 Spring 项目 | 适用于 Spring Boot 项目 |
灵活性 | 配置灵活,细节控制全面 | 依赖自动配置,灵活性稍低 |
代码复杂度 | 需要手动编写配置类 | 自动配置,代码量少,集成简单 |
与 Spring 的集成 | 需手动管理,适用于传统 Java 项目 | Spring Boot 会自动管理 RedissonClient |
典型场景 | 对 Spring 依赖不多,或者需要特殊配置场景 | 使用 Spring Boot,追求快速开发和简洁配置 |
如何选择?
- 如果你的项目是传统 Java 项目,或者使用了 Spring Framework 而不是 Spring Boot,并且你希望对 Redis 的配置有更多细节掌控,那么可以选择 原始 Redisson 依赖 的方式。它可以让你根据需求实现自定义的配置和连接管理。
- 如果你的项目是 Spring Boot 项目,并且你希望充分利用 Spring Boot 的自动配置特性来减少配置代码,可以选择 Redisson Spring Boot Starter。这种方式集成简单,代码更加简洁,可以大大提高开发效率。
总结
Redisson
提供了两种集成 Redis 的方式:原始依赖和 Spring Boot Starter。原始依赖适用于需要完全自定义配置的场景,而 Spring Boot Starter
使得集成过程变得更加简单,特别适合 Spring Boot 项目。根据具体项目的需求和开发环境选择合适的方式,能够更好地帮助你完成项目的 Redis 集成,实现更强大的分布式能力。
相关文章:
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
Redisson 是一个高性能的 Java Redis 客户端,提供了丰富的分布式工具集,如分布式锁、Map、Queue 等,帮助开发者简化 Redis 的操作。在集成 Redisson 到项目时,开发者通常有两种选择: 使用 Redisson 原始依赖。使用 Re…...

Git命令使用与原理详解
1.仓库 # 在当前目录新建一个Git代码库 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init [project-name] # 下载一个项目和它的整个代码历史 $ git clone [url]2.配置 # 显示当前的Git配置 $ git config --list # 编辑Git配置文件 $ git co…...

Linux:自定义Shell
本文旨在通过自己完成一个简单的Shell来帮助理解命令行Shell这个程序。 目录 一、输出“提示” 二、获取输入 三、切割字符串 四、执行指令 1.子进程替换 2.内建指令 一、输出“提示” 这个项目基于虚拟机Ubuntu22.04.5实现。 打开终端界面如图所示。 其中。 之前&#x…...
vue项目中中怎么获取环境变量
在 Vue 项目中,有几种获取环境变量的方法。最常用的是通过 import.meta.env 来访问。 1.首先在项目根目录创建环境变量文件: .env # 所有环境都会加载 .env.development # 开发环境 .env.production # 生产环境2.在环境变量文件…...
C#里怎么样使用正则表达式?
C#里怎么样使用正则表达式? 正则表达式是由普通字符(如英文字母)以及特殊字符(也称为元字符)组成的一种文字模式 这种文字模式可用于检查字符串的值是否满足一定的规则,例如: 验证输入的邮箱是否合法 输入的身份证号码是否合法 输入的用户名是否满足条件等 也可以…...

《生成式 AI》课程 第5講:訓練不了人工智慧?你可以訓練你自己 (下)
资料来自李宏毅老师《生成式 AI》课程,如有侵权请通知下线 Introduction to Generative AI 2024 Springhttps://speech.ee.ntu.edu.tw/~hylee/genai/2024-spring.php 摘要 这一系列的作业是为 2024 年春季的《生成式 AI》课程设计的,共包含十个作业。…...
Vue 动态给 data 添加新属性深度解析:问题、原理与解决方案
在 Vue 中,动态地向 data 中添加新的属性是一个常见的需求,但它也可能引发一些问题,尤其是关于 响应式更新 和 数据绑定 的问题。Vue 的响应式系统通过 getter 和 setter 来追踪和更新数据,但 动态添加新属性 时,Vue 并不会自动为这些新属性创建响应式链接。 1. 直接向 V…...

【Pytest+Yaml+Allure】实现接口自动化测试框架
一、框架思想 requestsyamlpytestallure实现接口自动化框架。结合数据驱动和分层思想,将代码与数据分离,易维护,易上手。使用yaml编写编写测试用例,利用requests库发送请求,使用pytest管理用例,allure生成…...
el-input绑定点击回车事件意外触发页面刷新
小伙伴们在项目中应该还是比较常用键盘指定按键事件的,尤其是一些筛选条件的通过点击键盘回车按键去触发搜索 例如: <el-form><el-form-item label条件title><el-input v-modelformData.searchKey keydown.entersearch></el-input…...
Golang的语言特性与鸭子类型
Golang的语言特性与鸭子类型 前言 什么是鸭子类型? Suppose you see a bird walking around in a farm yard. This bird has no label that says ‘duck’. But the bird certainly looks like a duck. Also, he goes to the pond and you notice that he swims l…...
如何在Linux系统中排查GPU上运行的程序
如何在Linux系统中排查GPU上运行的程序 在Linux系统中,随着深度学习和高性能计算的普及,GPU资源的管理和监控变得越来越重要。当您遇到GPU资源不足或性能下降的问题时,需要能够快速定位并解决这些问题。本文将介绍几种常用的方法来帮助您排查…...
VSCode 新建 Python 包/模块 Pylance 无法解析
问题描述: 利用 VSCode 写代码,在项目里新建一个 Python 包或者模块,然后在其他文件里正常导入这个包或者模块时出现: Import “xxxx” could not be resolved Pylance (reportMissingImports) 也就是说 Pylance 此时无法解析我们…...

Unet++改进44:添加MogaBlock(2024最新改进模块)|在纯基于卷积神经网络的模型中进行判别视觉表示学习,具有良好的复杂性和性能权衡。
本文内容:添加MogaBlock 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 通过将内核尽可能全局化,现代卷积神经网络在计算机视觉任务中显示出巨大的潜力。然而,最近在深度神经网络(dnn)内的多阶博弈论相互作用方面的进展揭示了现代卷积神经网络的表示瓶…...

计算机网络(14)ip地址超详解
先看图: 注意看第三列蓝色标注的点不会改变,A类地址第一个比特只会是0,B类是10,C类是110,D类是1110,E类是1111. IPv4地址根据其用途和网络规模的不同,分为五个主要类别(A、B、C、D、…...

【C语言】野指针问题详解及防范方法
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 💯前言💯什么是野指针?💯未初始化的指针代码示例问题分析解决方法 💯指针越界访问代码示例问题分析解决方法 💯指向已释放内存的…...

【SVN和GIT】版本控制系统详细下载使用教程
文章目录 ** 参考文章一、什么是SVN和GIT二、软件使用介绍1 SVN安装1.1 服务端SVN下载地址1.2 客户端SVN下载地址2 SVN使用2.1 服务端SVN基础使用2.1.1 创建存储库和用户成员2.1.2 为存储库添加访问人员2.2 客户端SVN基础使用2.2.1 在本地下载库中的内容2.2.2 版本文件操作--更…...

【Vue】Vue3.0(二十六)Vue3.0中的作用域插槽
上篇文章 【Vue】Vue3.0(二十五)Vue3.0中的具名插槽 的概念和使用场景 🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间:2024年11月20日17点30分 文章目录 概念使用场景示…...
神经网络(系统性学习二):单层神经网络(感知机)
此前篇章: 神经网络中常用的激活函数 神经网络(系统性学习一):入门篇 单层神经网络(又叫感知机) 单层网络是最简单的全连接神经网络,它仅有输入层和输出层,没有隐藏层。即&#x…...
CTF之密码学(BF与Ook)
BrainFuck(通常也被称为Brainfuck或BF)和Ook是两种非常特殊且有趣的编程语言。以下是对这两种语言的详细介绍: 一、BrainFuck 简介: BrainFuck是一种极小化的计算机语言,由Urban Mller在1993年创建。由于“fuck”在英…...

【TEST】Apache JMeter + Influxdb + Grafana
介绍 使用Jmeter发起测试,测试结果存入Influxdb,Grafana展示你的测试结果。 环境 windows 10docker desktopJDK17 安装 Apache JMeter 访问官网(Apache JMeter - Apache JMeter™)下载JMeter(目前最新版本5.6.3&a…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...
JS设计模式(5): 发布订阅模式
解锁JavaScript发布订阅模式:让代码沟通更优雅 在JavaScript的世界里,我们常常会遇到这样的场景:多个模块之间需要相互通信,但是又不想让它们产生过于紧密的耦合。这时候,发布订阅模式就像一位优雅的信使,…...

数据库管理与高可用-MySQL故障排查与生产环境优化
目录 #1.1MySQL单案例故障排查 1.1.1MySQL常见的故障排查 1.1.2MySQL主从故障排查 #2.1MySQL优化 2.1.1硬件方面的优化 2.1.2进程方面的优化 #3.1MySQL存储引擎 3.1.1 MyISAM存储引擎 3.1.2 InnoDB存储引擎 1.1MySQL单案例故障排查 1.1.1MySQL常见的故障排查 (1&…...

【汇编逆向系列】四、函数调用包含单个参数之Double类型-mmword,movsd,mulsd,addsd指令,总结汇编的数据类型
一、汇编代码 上一节开始,讲到了很多debug编译独有的汇编方式,为了更好的区分release的编译器优化和debug的区别,从本章节开始将会提供debug和release的汇编用作对比 Debugb编译 single_double_param:00000000000000A0: F2 0F 11 44 24 08…...