spring-boot 速成(12) - 如何注入多个redis StringRedisTemplate

简介: 默认情况下,spring-boot的redis自动配置,只能注册一个StringRedisTemplate实例,如果希望注入多个,比如:1个读写database 0,1个读写database 1 ...

默认情况下,spring-boot的redis自动配置,只能注册一个StringRedisTemplate实例,如果希望注入多个,比如:1个读写database 0,1个读写database 1 ... ,默认的自动配置就不行了,可以参考下面的做法:

一、创建多实例配置类

  1 package cn.mwee.order.cloud.admin.common.config;
  2 
  3 import org.springframework.beans.factory.annotation.Value;
  4 import org.springframework.context.annotation.Bean;
  5 import org.springframework.context.annotation.Configuration;
  6 import org.springframework.context.annotation.Primary;
  7 import org.springframework.data.redis.connection.RedisConnectionFactory;
  8 import org.springframework.data.redis.connection.RedisSentinelConfiguration;
  9 import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
 10 import org.springframework.data.redis.core.StringRedisTemplate;
 11 import org.springframework.data.redis.serializer.StringRedisSerializer;
 12 import redis.clients.jedis.JedisPoolConfig;
 13 
 14 import java.util.HashSet;
 15 import java.util.Set;
 16 
 17 /**
 18  * Created by 菩提树下的杨过(http://yjmyzz.cnblogs.com/) on 19/09/2017.
 19  */
 20 @Configuration
 21 public class RedisConfig {
 22 
 23     @Value("${redis.sentinel.group}")
 24     protected String sentinelGroupName;
 25 
 26     @Value("${redis.sentinel.nodes}")
 27     protected String sentinelNodes;
 28 
 29     @Value("${redis.maxTotal}")
 30     protected int maxTotal;
 31 
 32     @Value("${redis.minIdle}")
 33     protected int minIdle;
 34 
 35     @Value("${redis.maxIdle}")
 36     protected int maxIdle;
 37 
 38     @Value("${redis.maxWaitMillis}")
 39     protected long maxWaitMillis;
 40 
 41     @Value("${redis.testOnBorrow}")
 42     protected boolean testOnBorrow;
 43 
 44     @Value("${redis.testOnReturn}")
 45     protected boolean testOnReturn;
 46 
 47     @Value("${redis.password}")
 48     protected String password;
 49 
 50     @Value("${redis.timeout}")
 51     protected int timeout;
 52 
 53     @Bean
 54     public RedisSentinelConfiguration redisSentinelConfiguration() {
 55         String[] nodes = sentinelNodes.split(",");
 56         Set<String> setNodes = new HashSet<>();
 57         for (String n : nodes) {
 58             setNodes.add(n.trim());
 59         }
 60         RedisSentinelConfiguration configuration = new RedisSentinelConfiguration(sentinelGroupName, setNodes);
 61         return configuration;
 62     }
 63 
 64     @Bean
 65     public JedisPoolConfig jedisPoolConfig() {
 66         JedisPoolConfig poolConfig = new JedisPoolConfig();
 67         poolConfig.setMaxTotal(maxTotal);
 68         poolConfig.setMinIdle(minIdle);
 69         poolConfig.setMaxIdle(maxIdle);
 70         poolConfig.setMaxWaitMillis(maxWaitMillis);
 71         poolConfig.setTestOnBorrow(testOnBorrow);
 72         poolConfig.setTestOnReturn(testOnReturn);
 73         return poolConfig;
 74     }
 75 
 76     @Bean
 77     public StringRedisSerializer stringRedisSerializer() {
 78         return new StringRedisSerializer();
 79     }
 80 
 81     @Bean(name = "redisTemplate00")
 82     @Primary
 83     public StringRedisTemplate redisTemplate00() {
 84         return buildRedisTemplate(buildConnectionFactory(0));
 85     }
 86 
 87     @Bean(name = "redisTemplate01")
 88     public StringRedisTemplate redisTemplate01() {
 89         return buildRedisTemplate(buildConnectionFactory(1));
 90     }
 91 
 92     @Bean(name = "redisTemplate02")
 93     public StringRedisTemplate redisTemplate02() {
 94         return buildRedisTemplate(buildConnectionFactory(2));
 95     }
 96 
 97     @Bean(name = "redisTemplate03")
 98     public StringRedisTemplate redisTemplate03() {
 99         return buildRedisTemplate(buildConnectionFactory(3));
100     }
101 
102     @Bean(name = "redisTemplate04")
103     public StringRedisTemplate redisTemplate04() {
104         return buildRedisTemplate(buildConnectionFactory(4));
105     }
106 
107     private JedisConnectionFactory buildConnectionFactory(int database) {
108         JedisConnectionFactory connectionFactory = new JedisConnectionFactory(redisSentinelConfiguration(), jedisPoolConfig());
109         connectionFactory.setUsePool(true);
110         connectionFactory.setTimeout(timeout);
111         connectionFactory.setDatabase(database);
112         connectionFactory.setPassword(password);
113         connectionFactory.afterPropertiesSet();
114         return connectionFactory;
115     }
116 
117     protected StringRedisTemplate buildRedisTemplate(RedisConnectionFactory connectionFactory) {
118         StringRedisTemplate template = new StringRedisTemplate();
119         template.setConnectionFactory(connectionFactory);
120         template.setValueSerializer(stringRedisSerializer());
121         template.afterPropertiesSet();
122         return template;
123     }
124 
125 }
View Code

 

上面的示例,注入了5个redisTemplate实例,分别对应redis的0到4,共5个database。

 

二、配置类application.yml

redis:
  sentinel:
    group: ${redis.sentinel.group}
    nodes: ${redis.sentinel.nodes}
  maxTotal: ${redis.maxTotal}
  minIdle: ${redis.minIdle}
  maxWaitMillis: ${redis.maxWait}
  testOnBorrow: ${redis.testOnBorrow}
  testOnReturn: ${redis.testOnReturn}
  password:
  timeout: ${redis.timeout}  

  大家把里面的占位符,换成具体值就可以了。

目录
相关文章
|
NoSQL 安全 Java
深入理解 RedisConnectionFactory:Spring Data Redis 的核心组件
在 Spring Data Redis 中,`RedisConnectionFactory` 是核心组件,负责创建和管理与 Redis 的连接。它支持单机、集群及哨兵等多种模式,为上层组件(如 `RedisTemplate`)提供连接抽象。Spring 提供了 Lettuce 和 Jedis 两种主要实现,其中 Lettuce 因其线程安全和高性能特性被广泛推荐。通过手动配置或 Spring Boot 自动化配置,开发者可轻松集成 Redis,提升应用性能与扩展性。本文深入解析其作用、实现方式及常见问题解决方法,助你高效使用 Redis。
1612 4
|
NoSQL Java 关系型数据库
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 介绍
本文介绍在 Spring Boot 中集成 Redis 的方法。Redis 是一种支持多种数据结构的非关系型数据库(NoSQL),具备高并发、高性能和灵活扩展的特点,适用于缓存、实时数据分析等场景。其数据以键值对形式存储,支持字符串、哈希、列表、集合等类型。通过将 Redis 与 Mysql 集群结合使用,可实现数据同步,提升系统稳定性。例如,在网站架构中优先从 Redis 获取数据,故障时回退至 Mysql,确保服务不中断。
586 0
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 介绍
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
1044 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
479 32
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
967 2
|
Java Spring
一键注入 Spring 成员变量,顺序编程
介绍了一款针对Spring框架开发的插件,旨在解决开发中频繁滚动查找成员变量注入位置的问题。通过一键操作(如Ctrl+1),该插件可自动在类顶部添加`@Autowired`注解及其成员变量声明,同时保持光标位置不变,有效提升开发效率和代码编写流畅度。适用于IntelliJ IDEA 2023及以上版本。
373 2
一键注入 Spring 成员变量,顺序编程
|
NoSQL Java API
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Spring Boot 集成 Redis
本文介绍了在Spring Boot中集成Redis的方法,包括依赖导入、Redis配置及常用API的使用。通过导入`spring-boot-starter-data-redis`依赖和配置`application.yml`文件,可轻松实现Redis集成。文中详细讲解了StringRedisTemplate的使用,适用于字符串操作,并结合FastJSON将实体类转换为JSON存储。还展示了Redis的string、hash和list类型的操作示例。最后总结了Redis在缓存和高并发场景中的应用价值,并提供课程源代码下载链接。
2939 0
|
NoSQL Java Redis
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 安装
本教程介绍在 VMware 虚拟机(CentOS 7)或阿里云服务器中安装 Redis 的过程,包括安装 gcc 编译环境、下载 Redis(官网或 wget)、解压安装、修改配置文件(如 bind、daemonize、requirepass 等设置)、启动 Redis 服务及测试客户端连接。通过 set 和 get 命令验证安装是否成功。适用于初学者快速上手 Redis 部署。
593 0
|
存储 NoSQL Java
使用lock4j-redis-template-spring-boot-starter实现redis分布式锁
通过使用 `lock4j-redis-template-spring-boot-starter`,我们可以轻松实现 Redis 分布式锁,从而解决分布式系统中多个实例并发访问共享资源的问题。合理配置和使用分布式锁,可以有效提高系统的稳定性和数据的一致性。希望本文对你在实际项目中使用 Redis 分布式锁有所帮助。
1407 5
|
消息中间件 NoSQL Java
Spring Boot整合Redis
通过Spring Boot整合Redis,可以显著提升应用的性能和响应速度。在本文中,我们详细介绍了如何配置和使用Redis,包括基本的CRUD操作和具有过期时间的值设置方法。希望本文能帮助你在实际项目中高效地整合和使用Redis。
1195 2