springboot整合redis后默认使用的是redist的db0号库,在学习redis时对redis库进行了很多数据操作,今天使用redis开始正式写项目的时候我想换一个库,但是不知道操作上网一搜发现配置多的要死,研究了一下发现只需要几行代码就可以实现
- 别人的完整版
package com.qianhe.utlis.RedisDB; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; 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.RedisStandaloneConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration; import org.springframework.data.redis.core.StringRedisTemplate; import java.time.Duration; @Configuration public class RedisConfig { @Value("${redis.database.db0}") private int db0; @Value("${redis.database.db1}") private int db1; @Value("${redis.database.db2}") private int db2; @Value("${redis.host}") private String host; @Value("${redis.port}") private int port; // @Value("${redis.password}") // private String password; @Value("${redis.timeout}") private int timeout; @Value("${redis.pool.max-active}") private int maxActive; @Value("${redis.pool.max-idle}") private int maxIdle; @Value("${redis.pool.min-idle}") private int minIdle; @Value("${redis.pool.max-wait}") private int maxWait; @Bean public GenericObjectPoolConfig getPoolConfig(){ // 配置redis连接池 GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); poolConfig.setMaxTotal(maxActive); poolConfig.setMaxIdle(maxIdle); poolConfig.setMinIdle(minIdle); poolConfig.setMaxWaitMillis(maxWait); return poolConfig; } @Primary @Bean(name = "redisTemplate0") public StringRedisTemplate getRedisTemplate0(){ return getStringRedisTemplate(db0); } @Bean(name = "redisTemplate1") public StringRedisTemplate getRedisTemplate1(){ return getStringRedisTemplate(db1); } @Bean(name = "redisTemplate2") public StringRedisTemplate getRedisTemplate2(){ // 构建工厂对象 return getStringRedisTemplate(db2); } private StringRedisTemplate getStringRedisTemplate(int database) { // 构建工厂对象 RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(); config.setHostName(host); config.setPort(port); //config.setPassword(RedisPassword.of(password)); LettucePoolingClientConfiguration clientConfig = LettucePoolingClientConfiguration.builder() .commandTimeout(Duration.ofSeconds(timeout)) .poolConfig(getPoolConfig()) .build(); LettuceConnectionFactory factory = new LettuceConnectionFactory(config, clientConfig); // 设置使用的redis数据库 factory.setDatabase(database); // 重新初始化工厂 factory.afterPropertiesSet(); return new StringRedisTemplate(factory); } } ———————————————— 版权声明:本文为CSDN博主「白小白的小白」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_42874635/article/details/118157740
研究了一下发现大部分都是没必要的,因为springboot整合redis后会通过yml自动配置,我们只需要配置一下具体数据库就行了
-
精简版代码
package com.hmdp.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import javax.annotation.Resource;
/**
* @Author: Thorns
* @Data:2023/5/1617:19
* @PackageName:top.thorns.redislearn.springdataredis
* @ClassName: RedisTemplateConfig
* @Description:
**/
@Configuration
public class RedisConfig {
@Resource
LettuceConnectionFactory factory;
/**
* 配置redis数据库,默认为db0
* @return
*/
@Bean
public StringRedisTemplate getStringRedisTemplate() {
// 设置使用的redis数据库
factory.setDatabase(1);
// 重新初始化工厂
factory.afterPropertiesSet();
return new StringRedisTemplate(factory);
}
只需要依赖一下Lettuce连接工厂,然后设置工厂数据源就好了,至于说Lettuce连接工厂的上层依赖配置,springboot会通过读取配置文件为我们自动配置。
我这里是偷懒写死了连接1号库,有需求的可以对上述代码进行一下封装动态传值切换redis库。
菜鸡一个可能写的有些地方不正确欢迎大佬指正,但是代码经过实验确实可以实现切换redis库