SpringBoot 整合 Redis 全面教程:从配置到使用

news/2024/11/28 20:51:29/

Redis 是一种高性能的键值存储数据库,而 Spring Boot 是一个简化了开发过程的 Java 框架。将两者结合,可以轻松地在 Spring Boot 项目中使用 Redis 来实现数据缓存、会话管理和分布式锁等功能。

一、添加 Redis 依赖

在 pom.xml 文件中添加 Redis 相关依赖

<dependencies><!-- Spring Data Redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
</dependencies>

二、配置 Redis 连接信息

在 application.properties 或 application.yml 配置文件中添加 Redis 连接信息

spring.redis.host=127.0.0.1
spring.redis.port=6379

根据自己 Redis 服务器配置,修改主机和端口信息

三、使用 RedisTemplate 进行操作

1. 创建 RedisTemplate Bean

在配置类中创建 RedisTemplate Bean,用于进行 Redis 操作

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(connectionFactory);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new GenericJackson2JsonRedisSerializer());return template;}
}

上述示例中使用了 JSON 序列化器来对值进行序列化和反序列化,你也可以根据需要选择其他序列化器。

2. 注入 RedisTemplate

在服务类或控制器中注入 RedisTemplate

@Autowired
private RedisTemplate<String, Object> redisTemplate;
3. 执行 Redis 操作

使用注入的 RedisTemplate 来进行 Redis 操作,设置键值对、获取值等

// 设置键值对
redisTemplate.opsForValue().set("key", "value");// 获取值
String value = (String) redisTemplate.opsForValue().get("key");

四、使用 Spring Cache 简化缓存操作

1. 添加 Spring Cache 依赖

在 pom.xml 文件中添加 Spring Cache 相关依赖

<dependencies><!-- Spring Data Redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- Spring Cache --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency>
</dependencies>
2. 启用缓存支持

在启动类上添加 @EnableCaching 注解,启用缓存支持

@SpringBootApplication
@EnableCaching
public class Application {// ...
}
3. 使用缓存注解

在服务类或方法上使用 Spring Cache 提供的缓存注解,如 @Cacheable@CachePut@CacheEvict

@Service
public class demoService {@Cacheable(value = "cacheName", key = "#id")public Object getData(String id) {// 从数据库或其他数据源获取数据return data;}@CachePut(value = "cacheName", key = "#id")public Object updateData(String id, Object newData) {// 更新数据库或其他数据源的数据return newData;}@CacheEvict(value = "cacheName", key = "#id")public void deleteData(String id) {// 删除数据库或其他数据源的数据}
}

五、使用 Redisson 实现分布式锁

1. 添加 Redisson 依赖

在 pom.xml 文件中添加 Redisson 相关依赖

<dependencies><!-- Spring Data Redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- Redisson --><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.16.3</version></dependency>
</dependencies>
2. 配置 Redisson

在配置文件中添加 Redisson 配置,例如 application.properties

# 单节点 Redisson 配置
spring.redis.redisson.config=classpath:redisson-single-node.yml

在 redisson-single-node.yml 配置文件中配置 Redisson 的连接信息

3. 使用 Redisson 获取锁:

在你的代码中使用 Redisson 获取分布式锁:

@Autowired
private RedissonClient redissonClient;public void doSomething() {RLock lock = redissonClient.getLock("lockName");try {lock.lock();// 执行需要加锁的操作} finally {lock.unlock();}
}

六、完善 Redis 的其他配置

除了基本配置,还可以根据实际需求完善 Redis 的其他配置,例如连接池配置、超时设置等。

一、连接池配置

Redis 使用连接池来管理和复用与 Redis 服务器的连接,以提高连接的效率和性能。

1. 在 配置文件中配置连接池相关参数

打开 Redis 配置文件 redis.conf,找到以下配置项并进行修改

# 最大连接数
maxclients 10000# TCP 连接的队列长度
tcp-backlog 511# 连接池中的最大空闲连接数
maxidle 100# 连接池中的最小空闲连接数
minidle 10# 连接超时时间(毫秒)
timeout 3000# 是否开启 TCP 连接的保活机制
tcp-keepalive 0
2. 通过客户端连接池配置对象进行配置

在 Spring Boot 项目中,可以通过 Redis 连接池配置对象 JedisPoolConfig 进行配置

@Configuration
public class RedisConfig {@Beanpublic JedisPoolConfig jedisPoolConfig() {JedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(10000);poolConfig.setMaxIdle(100);poolConfig.setMinIdle(10);poolConfig.setMaxWaitMillis(3000);// 其他配置项设置return poolConfig;}@Beanpublic JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig poolConfig) {RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();config.setHostName("127.0.0.1");config.setPort(6379);// 其他 Redis 配置项设置JedisClientConfiguration clientConfig = JedisClientConfiguration.builder().usePooling().poolConfig(poolConfig).build();return new JedisConnectionFactory(config, clientConfig);}@Beanpublic RedisTemplate<String, Object> redisTemplate(JedisConnectionFactory connectionFactory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(connectionFactory);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new GenericJackson2JsonRedisSerializer());return template;}
}
二、超时设置

超时设置用于控制 Redis 操作的超时时间,以防止长时间的阻塞或无响应操作

1. 配置 Redis 连接超时时间

在 Redis 配置文件中设置 timeout 参数,单位为毫秒,如下设置连接超时时间为 5000 毫秒

timeout 5000
2. 通过 Redis 客户端配置对象进行配置

通过 JedisClientConfiguration 进行配置,将读取操作的超时时间设置为 5秒

@Bean
public JedisClientConfiguration jedisClientConfiguration() {Duration timeout = Duration.ofSeconds(5);return JedisClientConfiguration.builder().readTimeout(timeout).build();
}@Bean
public JedisConnectionFactory jedisConnectionFactory(JedisClientConfiguration clientConfig) {// 其他配置项设置return new JedisConnectionFactory(config, clientConfig);
}

http://www.ppmy.cn/news/1353674.html

相关文章

【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱9(附带项目源码)

效果演示 文章目录 效果演示系列目录前言箱子库存源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中&#xff0c;我们将探索如何用unity制作一个3D背包、库存、制作、快捷栏、存…

【吴恩达·机器学习】第三章:分类任务:逻辑回归模型(交叉熵损失函数、决策边界、过拟合、正则化)

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; Yaoyao2024每日一言&#x1f33c;: 勇敢的人&#xff0c;不是不落泪的人&#xff0c;而是愿意含着泪继续奔跑的人。 ——《朗读者》 0、声明 本系列博客文章是博主本人根据吴…

C/C++如何把指针所指向的指针设为空指针?

实践出真知&#xff0c;指针对于初学的友友来说&#xff0c;头都要大了。喵喵一直遵循在实践中学&#xff0c;在学习中实践&#xff0c;相信你也会有所得&#xff01; 以下是该问题的解决方案&#xff1a; int** ptrPtr new int*; // 创建指向指针的指针 int* ptr new int;…

MATLAB Coder从入门到放弃

一、MATLAB Coder入门 1 MATLAB Coder是什么 从 MATLAB 代码生成 C 和 C 代码 MATLAB Coder™ 可从 MATLAB 代码生成适用于各种硬件平台&#xff08;从桌面计算机系统到嵌入式硬件&#xff09;的 C 和 C 代码。它支持大多数 MATLAB 语言和广泛的工具箱。您可以将生成的代码作…

Python setattr函数

在Python编程中&#xff0c;setattr()函数是一个有用且灵活的内置函数&#xff0c;用于设置对象的属性值。它可以在运行时动态地设置对象的属性&#xff0c;无论是新建对象还是已有对象。本文将深入探讨setattr()函数的用法、语法、示例代码&#xff0c;并探讨其在实际编程中的…

Spring AMQP(3.1.1)设置ConfirmCallback和ReturnsCallback

文章目录 一、起因二、代码1. 定义exchange和queue2. RabbitTemplate3. EnhancedCorrelationData4. 发送消息 环境如下 VersionSpringBoot3.2.1spring-amqp3.1.1RabbitMq3-management 一、起因 老版本的spring-amqp在CorrelationData上设置ConfirmCallback。但是今天却突然发…

洛谷: P1480 A/B Problem

题目描述 输入两个整数 a , b a,b a,b&#xff0c;输出它们的商。 输入格式 两行&#xff0c;第一行是被除数&#xff0c;第二行是除数。 输出格式 一行&#xff0c;商的整数部分。 样例 #1 样例输入 #1 10 2样例输出 #1 5提示 0 ≤ a ≤ 1 0 5000 0\le a\le 10^{500…

openJudge | 循环移动 C语言

总时间限制: 1000ms 内存限制: 65536kB 描述 给定一组整数&#xff0c;要求利用数组把这组数保存起来&#xff0c;再利用指针实现对数组中的数循环移动。假定共有n个整数&#xff0c;则要使前面各数顺序向后移m个位置&#xff0c;并使最后m各数变为最前面的m各数。 注意&…