springboot+redisTemplate多库操作

单库操作
  • 我做了依赖管理,所以就不写版本号了
  • 添加依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
  • 配置文件
spring:
  redis:
    database: 2
    host: 127.0.0.1
    port: 6379
    password: 123456
  • redisTemplate配置
    /**
    * @author liouwb
    */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DateUtil.DateStyle.YYYY_MM_DD_HH_MM_SS.getValue());
        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter));
        javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeFormatter));
        om.registerModule(javaTimeModule);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.setHashKeySerializer(jackson2JsonRedisSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.setDefaultSerializer(new StringRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }
  • 使用
    @Autowired(required = false)
    private RedisTemplate<String, Object> redisTemplate;

    @Test
    public void testRedis() {
        redisTemplate.opsForValue().set("redisTemplate", "redisTemplate");
        Object value = redisTemplate.opsForValue().get("redisTemplate");
        System.out.println("redis设置的值为:" + value);
    }

在这里插入图片描述

  • 能够正常往redis设置数据,也可以正常获取到
    在这里插入图片描述
  • 可以看到数据库编号是yml里面配置的database编号
多库操作
  • 使用lettuce连接池,添加commons-pools依赖
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>
  • 配置类
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * redis数据库配置
 *
 * @author liouwb
 */
@Data
@Configuration
public class RedisConfigProperties {
    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.port}")
    private int port;

    @Value("${spring.redis.password}")
    private String password;

    /**
     * 连接超时时间
     * 目前不从配置文件获取
     */
    private int timeout = 200;

    private int maxActive = 200;

    private int maxIdle = 8;

    private int minIdle = 0;

    private int maxWait = 100;
}
  • 配置连接池
    /**
     * redis连接池
     *
     * @author liouwb
     * @rutern org.apache.commons.pool2.impl.GenericObjectPoolConfig
     */
    @Bean
    public GenericObjectPoolConfig getPoolConfig() {
        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
        poolConfig.setMaxTotal(redisConfigProperties.getMaxActive());
        poolConfig.setMaxIdle(redisConfigProperties.getMaxIdle());
        poolConfig.setMinIdle(redisConfigProperties.getMinIdle());
        poolConfig.setMaxWaitMillis(redisConfigProperties.getMaxWait());
        return poolConfig;
    }
  • 设置redisTemplate操作模版工厂类
    /**
     * RedisTemplate连接工厂
     *
     * @param database数据库编号
     * @author liouwb
     * @rutern org.springframework.data.redis.core.RedisTemplate<java.lang.String, java.lang.Object>
     */
    private RedisTemplate<String, Object> redisTemplateFactory(int database) {
        // 构建工厂对象
        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
        configuration.setHostName(redisConfigProperties.getHost());
        configuration.setPort(redisConfigProperties.getPort());
        configuration.setPassword(RedisPassword.of(redisConfigProperties.getPassword()));
        LettucePoolingClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder()
                .commandTimeout(Duration.ofSeconds(redisConfigProperties.getTimeout())).poolConfig(getPoolConfig()).build();
        // 连接工厂
        LettuceConnectionFactory factory = new LettuceConnectionFactory(configuration, clientConfiguration);
        // 设置使用的redis数据库
        factory.setDatabase(database);
        // 重新初始化工厂
        factory.afterPropertiesSet();

        // 序列化配置
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DateUtil.DateStyle.YYYY_MM_DD_HH_MM_SS.getValue());
        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter));
        javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeFormatter));
        om.registerModule(javaTimeModule);
        jackson2JsonRedisSerializer.setObjectMapper(om);

        // 初始化连接
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        // 设置连接工厂
        template.setConnectionFactory(factory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.setHashKeySerializer(jackson2JsonRedisSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.setDefaultSerializer(new StringRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }
  • 设置对应数据库的redisTemplate模版类
    /**
     * db0 第一个库
     *
     * @author liouwb
     * @time 2024-01-03
     * @rutern org.springframework.data.redis.core.RedisTemplate<java.lang.String, java.lang.Object>
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate0() {
        return this.redisTemplateFactory(0);
    }

    /**
     * db1 第二个库
     *
     * @author liouwb
     * @rutern org.springframework.data.redis.core.RedisTemplate<java.lang.String, java.lang.Object>
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate1() {
        return this.redisTemplateFactory(1);
    }
  • 对不同redis库进行操作
    @Autowired(required = false)
    @Qualifier("redisTemplate0")
    private RedisTemplate<String, Object> redisTemplate0;
    @Autowired(required = false)
    @Qualifier("redisTemplate1")
    private RedisTemplate<String, Object> redisTemplate1;

     @Test
    public void testRedis() {
        redisTemplate0.opsForValue().set("redisTemplate0", "redisTemplate0");
        Object value0 = redisTemplate0.opsForValue().get("redisTemplate0");
        System.out.println("redis0设置的值为:" + value);

        redisTemplate1.opsForValue().set("redisTemplate1", "redisTemplate1");
        Object value1 = redisTemplate0.opsForValue().get("redisTemplate1");
        System.out.println("redis1设置的值为:" + value1);
    }
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值