spring-boot 速成(12) - 如何注入多个redis StringRedisTemplate
时间:2022-04-22
本文章向大家介绍spring-boot 速成(12) - 如何注入多个redis StringRedisTemplate,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
默认情况下,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 }
上面的示例,注入了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}
大家把里面的占位符,换成具体值就可以了。
- 企业网站架构之Nginx+tomcat+memcached集群
- 企业级Docker Registry开源工具Harbor的介绍以及使用指南
- HLS Lesson8-基本操作
- Windows渗透测试工具:RedSnarf
- HLS Lesson7-复合数据类型
- matlab GUI基础3
- 【Python环境】《Python数据科学入门》试译 第一章 简介
- HLS Lesson20-实例分析
- WannaCry勒索病毒详细解读
- matlab GUI基础3
- 不使用反射的实体类方案
- matlab GUI基础1
- Why to do,What to do,Where to do 与 Lambda表达式!
- Cloak ; Dagger攻击:一种可针对所有版本Android的攻击技术(含演示视频)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 人人都能看懂的鸿蒙 “JS 小程序” 数据绑定原理
- Xcode12适配The linked library is missing one or more architectures required by this target问题
- [译] VueJS 中更好的组件组合方式
- 无异常日志,就不能排查问题了???
- 带你跳出源码地狱,从原理上理解MyBatis对Spring源码的扩展实现
- 网上翻译嫌麻烦?Python破解有道JS加密,让你随时能翻译
- 前端模块化开发--React框架(一): 入门和面向组件编程
- Python爬虫实战练习:爬取美团旅游景点评论数据
- Python爬虫实战:爬取链家网二手房数据
- 前端模块化开发--ES6相关知识
- (一)ROS开发平台环境搭建与测试
- 前端模块化开发--Node基础&&WebPack模块化开发
- CNN神经网络--手写数字识别
- 关于模型预测结果好坏的几个评价指标
- SpringBoot微服务架构项目--Union社交平台