springboot 1.54 双redis连接池 配置和使用

事情原因 我手上主redis 内存不大 ,不想迁移了,重新配置一台redis做额外计算使用,所以打算修改服务增加第二个redis连接配置 ,把新增需求放在第二个redis上计算,废话就不多说,上图和代码。

1.修改远程的配置文件增加第二个redis连接配置

  

多说一句 连接池不要太多连接 会造成大量碎片,健康度直线下降

2.服务增加Redis配置类

package cn.turing.firecontrol.device.config;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;

@Configuration
public class RedisConfig {

    // 第一个Redis配置(原Redis)
    @Value("${spring.redis.host}")
    private String primaryHost;
    
    @Value("${spring.redis.port}")
    private int primaryPort;
    
    @Value("${spring.redis.password}")
    private String primaryPassword;
    
    @Value("${spring.redis.database}")
    private int primaryDatabase;
    
    @Value("${spring.redis.t

<think>首先,用户的问题是关于在Spring Boot项目中配置Redis及其连接池,要求提供完整的配置代码示例。用户提到了参考站内引用,但这些引用是关于Spring配置的一般信息,不是直接针对Redis的。我需要基于我的知识来提供准确的回答。 关键点: - 使用中文回答。 - 结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 - 在回答中引用的段落末尾自然地添加引用标识,如[^1]。 - 生成相关问题。 系统级指令: - 所有行内数学表达式用$...$,但这里可能不涉及数学,所以忽略。 - 独立公式用$$...$$,但可能不适用。 - LaTeX语法正确,但这里主要是代码配置。 - 生成相关问题。 回答结构: 1. **介绍**:简要解释Spring Boot如何配置Redis。 2. **步骤**:分步指导,包括配置文件代码示例。 3. **代码示例**:提供完整的配置代码。 4. **引用**:在相关部分添加引用标识。 5. **相关问题**:在最后生成相关问题。 用户提供的引用: - 引用[1]:关于Redis主机端口的配置。 - 引用[2]:关于Spring配置文件的通用设置。 这些引用不是直接针对Redis连接池的,所以我需要补充我的知识。Redis连接池通常通过Lettuce或Jedis客户端实现,Spring Boot默认使用Lettuce。 完整配置代码示例: - **依赖添加**:在pom.xml中添加Spring Boot Starter Data Redis。 - **配置文件**:在application.properties或application.yml中配置Redis连接连接池。 - **代码示例**:一个简单的Redis操作类。 配置Redis连接池: - Spring Boot使用Lettuce时,连接池配置通过spring.redis.lettuce.pool.*属性。 - 示例配置: ``` spring.redis.host=localhost spring.redis.port=6379 spring.redis.password= # 如果有密码 spring.redis.lettuce.pool.max-active=8 spring.redis.lettuce.pool.max-idle=8 spring.redis.lettuce.pool.min-idle=0 spring.redis.lettuce.pool.max-wait=-1ms ``` 代码示例: - 一个Spring Bean,如RedisTemplate的配置。 - 一个服务类使用RedisTemplate操作Redis。 添加引用: - 在配置部分,可以引用用户提供的引用[1]作为基础配置。 - 其他部分基于通用知识。 最后,生成相关问题: - 例如:如何测试Redis连接?如何处理Redis连接失败?如何优化Redis性能? 确保回答真实可靠: - 基于Spring Boot官方文档常见实践。</think>### Spring Boot 配置 Redis 及其连接池完整指南 在 Spring Boot 项目中配置 Redis 及其连接池,主要通过 Spring Data Redis 实现。默认使用 Lettuce 作为 Redis 客户端,支持连接池管理以提高性能。以下是逐步配置代码示例,确保真实可靠。 #### 步骤 1: 添加 Maven 依赖 在 `pom.xml` 中添加 Spring Boot Starter Data Redis 依赖: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> </dependencies> ``` #### 步骤 2: 配置文件设置 在 `application.properties` 或 `application.yml` 中配置 Redis 连接参数连接池。以下示例使用 `application.properties`: ```properties # Redis 基础连接配置(参考引用[1]) spring.redis.host=localhost spring.redis.port=6379 spring.redis.password= # 如果 Redis 有密码,填写此处 # Lettuce 连接池配置(最大连接数、空闲连接等) spring.redis.lettuce.pool.max-active=8 # 最大活跃连接spring.redis.lettuce.pool.max-idle=8 # 最大空闲连接spring.redis.lettuce.pool.min-idle=0 # 最小空闲连接spring.redis.lettuce.pool.max-wait=-1ms # 最大等待时间(-1 表示无限等待) spring.redis.lettuce.shutdown-timeout=100ms # 关闭超时时间 ``` - **说明**: - `spring.redis.host` `spring.redis.port` 指定 Redis 服务器地址,默认为 localhost 6379[^1]。 - 连接池参数(如 `max-active`)优化高并发场景,避免频繁创建新连接。 - 如果使用 Jedis 替代 Lettuce,需添加 Jedis 依赖并配置 `spring.redis.jedis.pool.*`。 #### 步骤 3: Java 代码实现 创建一个 Redis 配置类来初始化 `RedisTemplate`,并编写一个服务类进行 Redis 操作。 **Redis 配置类** (`RedisConfig.java`): ```java 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.StringRedisSerializer; @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); // 设置键值序列化器,避免乱码 template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new StringRedisSerializer()); return template; } } ``` **Redis 服务类** (`RedisService.java`): ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @Service public class RedisService { @Autowired private RedisTemplate<String, Object> redisTemplate; // 存储数据到 Redis public void setValue(String key, String value) { redisTemplate.opsForValue().set(key, value); } // 从 Redis 获取数据 public String getValue(String key) { return (String) redisTemplate.opsForValue().get(key); } // 删除数据 public void deleteKey(String key) { redisTemplate.delete(key); } } ``` #### 步骤 4: 测试 Redis 连接 编写一个简单的测试类验证配置: ```java import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest public class RedisTest { @Autowired private RedisService redisService; @Test public void testRedisConnection() { redisService.setValue("testKey", "Hello Redis!"); String value = redisService.getValue("testKey"); System.out.println("从 Redis 获取的值: " + value); // 输出: Hello Redis! } } ``` #### 关键说明 - **连接池优势**:Lettuce 连接池减少连接创建开销,提升性能,尤其在高并发场景。 - **故障处理**:如果连接失败,Spring Boot 会抛出 `RedisConnectionFailureException`,建议添加重试逻辑。 - **配置灵活性**:所有参数可通过 `application.properties` 动态调整,无需修改代码[^2]。 ### 相关问题 1. 如何监控 Spring BootRedis 连接池的性能指标? 2. Redis 连接池配置不当会导致哪些常见问题? 3. Spring Boot 如何支持 Redis 哨兵或集群模式的高可用配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值