springboot配置redis多数据源

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: springboot配置redis多数据源

背景


其实程序里配置多数据源的需求还是挺多的,我们有一个项目是双数据源的,但是看起来,代码乱糟糟的,所以查了查,找了一种配置看起来清爽一点的,下面上代码


代码


代码分两部分,yml配置和config代码配置


yml


spring:
  redis:
    database: 0
    host: xxxx.xxx.aliyuncs.com
    port: 6379
    password: password
    lettuce:
      pool:
        max-active: 100
        max-idle: 10
        max-wait: 3000
        min-idle: 10
    timeout: 3000
  redis2:
    database: 0
    host: xxxx.xxx2.aliyuncs.com
    port: 6379
    password: password2 


代码配置


package com.airdoc.auth.config;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.EnableCaching;
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.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.Duration;
/**
 * @author author
 * @date 2022/7/27
 * @apiNote
 */
@EnableCaching
@Configuration
public class MultiRedisConfig {
        @Value("${spring.redis.lettuce.pool.max-idle}")
        int maxIdle;
        @Value("${spring.redis.lettuce.pool.max-active}")
        int maxActive;
        @Value("${spring.redis.lettuce.pool.max-wait}")
        long maxWaitMillis;
        @Value("${spring.redis.lettuce.pool.min-idle}")
        int minIdle;
        @Value("${spring.redis.timeout}")
        int timeout;
        @Bean(name = "redisTemplate")
        public <T> RedisTemplate<String, T> redisTemplate(@Value("${spring.redis.database}") int database,
                                                 @Value("${spring.redis.host}") String hostName,
                                                 @Value("${spring.redis.port}") int port,
                                                 @Value("${spring.redis.password}") String password) {
            RedisTemplate<String, T> template = new RedisTemplate<>();
            template.setConnectionFactory(connectionFactory(database, hostName, port, password));
            template.setKeySerializer(new StringRedisSerializer());
            template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
            template.setHashKeySerializer(new StringRedisSerializer());
            template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
            return template;
        }
        @Bean(name = "gbRedisTemplate")
        public StringRedisTemplate gbRedisTemplate(@Value("${spring.redis2.database}") int database,
                                                    @Value("${spring.redis2.host}") String hostName,
                                                    @Value("${spring.redis2.port}") int port,
                                                    @Value("${spring.redis2.password}") String password) {
            StringRedisTemplate temple = new StringRedisTemplate();
            temple.setConnectionFactory(connectionFactory(database, hostName, port, password));
            return temple;
        }
        /**
         * 使用lettuce配置Redis连接信息
         *
         * @param database Redis数据库编号
         * @param hostName 服务器地址
         * @param port     端口
         * @param password 密码
         * @return RedisConnectionFactory
         */
        public RedisConnectionFactory connectionFactory(int database, String hostName, int port, String password) {
            RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
            configuration.setHostName(hostName);
            configuration.setPort(port);
            if (StringUtils.isNotBlank(password)) {
                configuration.setPassword(password);
            }
            if (database != 0) {
                configuration.setDatabase(database);
            }
            GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
            genericObjectPoolConfig.setMaxIdle(maxIdle);
            genericObjectPoolConfig.setMinIdle(minIdle);
            genericObjectPoolConfig.setMaxTotal(maxActive);
            genericObjectPoolConfig.setMaxWaitMillis(maxWaitMillis);
            LettuceClientConfiguration clientConfig = LettucePoolingClientConfiguration.builder()
                    .commandTimeout(Duration.ofMillis(timeout))
                    .poolConfig(genericObjectPoolConfig)
                    .build();
            LettuceConnectionFactory lettuce = new LettuceConnectionFactory(configuration, clientConfig);
            lettuce.afterPropertiesSet();
            return lettuce;
        }
}


总结


其实实现方式还是挺多的,还有一种我看也挺好玩,有兴趣可以看一下,指路 :Redis多数据源

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
25天前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
46 0
|
18天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
36 1
SpringBoot入门(7)- 配置热部署devtools工具
|
29天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
40 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
20天前
|
存储 前端开发 JavaScript
springboot中路径默认配置与重定向/转发所存在的域对象
Spring Boot 提供了简便的路径默认配置和强大的重定向/转发机制,通过合理使用这些功能,可以实现灵活的请求处理和数据传递。理解并掌握不同域对象的生命周期和使用场景,是构建高效、健壮 Web 应用的关键。通过上述详细介绍和示例,相信读者能够更好地应用这些知识,优化自己的 Spring Boot 应用。
24 3
|
28天前
|
Java 数据库连接
SpringBoot配置多数据源实战
第四届光学与机器视觉国际学术会议(ICOMV 2025) 2025 4th International Conference on Optics and Machine Vision
54 8
|
26天前
|
Java 数据库连接 数据库
springboot启动配置文件-bootstrap.yml常用基本配置
以上是一些常用的基本配置项,在实际应用中可能会根据需求有所变化。通过合理配置 `bootstrap.yml`文件,可以确保应用程序在启动阶段加载正确的配置,并顺利启动运行。
59 2
|
28天前
|
NoSQL Java API
springboot项目Redis统计在线用户
通过本文的介绍,您可以在Spring Boot项目中使用Redis实现在线用户统计。通过合理配置Redis和实现用户登录、注销及统计逻辑,您可以高效地管理在线用户。希望本文的详细解释和代码示例能帮助您在实际项目中成功应用这一技术。
30 4
|
1月前
|
消息中间件 NoSQL Java
Spring Boot整合Redis
通过Spring Boot整合Redis,可以显著提升应用的性能和响应速度。在本文中,我们详细介绍了如何配置和使用Redis,包括基本的CRUD操作和具有过期时间的值设置方法。希望本文能帮助你在实际项目中高效地整合和使用Redis。
45 2
|
1月前
|
Java Spring 容器
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
70 3
|
1月前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]