Spring boot如何快速的配置多個(gè)Redis數(shù)據(jù)源
簡介
redis 多數(shù)據(jù)源主要的運(yùn)用場(chǎng)景是在需要使用多個(gè)redis服務(wù)器或者使用多個(gè)redis庫,本文采用的是fastdep依賴集成框架,快速集成Redis多數(shù)據(jù)源并集成lettuce連接池,只需引入依賴后在yaml文件中配置多數(shù)據(jù)源連接信息即可。
源碼地址希望大家可以star支持一下,后續(xù)還會(huì)加入其它依賴的簡易整合。https://github.com/louislivi/fastdep
引入依賴
Maven
<dependency> <groupId>com.louislivi.fastdep</groupId> <artifactId>fastdep-redis</artifactId> <version>1.0.1</version></dependency>
Gradle
compile group: ’com.louislivi.fastdep’, name: ’fastdep-redis’, version: ’1.0.1’
配置文件
fastdep: redis: redis1: #連接名稱 database: 0 host: 192.168.12.88 port: 6379 lettuce: #下面為連接池的補(bǔ)充設(shè)置 shutdown-timeout: 100 # 關(guān)閉超時(shí)時(shí)間 pool: max-active: 18 # 連接池最大連接數(shù)(使用負(fù)值表示沒有限制) max-idle: 8 # 連接池中的最大空閑連接 max-wait: 30 # 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒有限制) min-idle: 0 # 連接池中的最小空閑連接 redis2: #連接名稱 database: 1 host: 192.168.12.88 port: 6379 lettuce: #下面為連接池的補(bǔ)充設(shè)置 shutdown-timeout: 100 # 關(guān)閉超時(shí)時(shí)間 pool: max-active: 18 # 連接池最大連接數(shù)(使用負(fù)值表示沒有限制) max-idle: 8 # 連接池中的最大空閑連接 max-wait: 30 # 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒有限制) min-idle: 0 # 連接池中的最小空閑連接
運(yùn)用
@Autowiredprivate StringRedisTemplate redis1StringRedisTemplate;// 注入時(shí) redis1 代表配置文件中的連接名稱 StringRedisTemplate 為固定注入redis對(duì)象類型,// 會(huì)自動(dòng)根據(jù)注入的變量名進(jìn)行匹配@Autowiredprivate StringRedisTemplate redis2StringRedisTemplate;@GetMapping('redis')public void redis() { System.out.println(redis1StringRedisTemplate.opsForValue().get('test')); System.out.println(redis2StringRedisTemplate.opsForValue().get('test'));}
擴(kuò)展
有時(shí)候需要自定義redisTemplate序列化和增加一些額外的配置,這時(shí)候我們可以封裝一個(gè)redis工具類來實(shí)現(xiàn)
package com.louislivi.fastdep.test.utils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.data.redis.serializer.StringRedisSerializer;import org.springframework.stereotype.Component;/** * RedisUtil * * @author : louislivi */@Componentpublic class RedisUtil { @Autowired private StringRedisTemplate redis1StringRedisTemplate; @Autowired private StringRedisTemplate redis2StringRedisTemplate; @Autowired private RedisTemplate redis2RedisTemplate; @Autowired private RedisTemplate redis1RedisTemplate; public RedisTemplate redisTemplate(String name) { RedisTemplate redisTemplate; switch (name) { case 'redis2':redisTemplate = redis2RedisTemplate;break; default:redisTemplate = redis1RedisTemplate;break; } StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); redisTemplate.setKeySerializer(stringRedisSerializer); redisTemplate.setValueSerializer(stringRedisSerializer); redisTemplate.setHashKeySerializer(stringRedisSerializer); redisTemplate.setHashValueSerializer(stringRedisSerializer); return redisTemplate; } public StringRedisTemplate stringRedisTemplate(String name) { StringRedisTemplate stringRedisTemplate; switch (name) { case 'redis2':stringRedisTemplate = redis2StringRedisTemplate;break; default:stringRedisTemplate = redis1StringRedisTemplate;break; } stringRedisTemplate.setEnableTransactionSupport(true); return stringRedisTemplate; }}
@Autowiredprivate RedisUtil redisUtil;@GetMapping('redis')public void redis() { System.out.println(redisUtil.redisTemplate('redis1').opsForValue().get('test')); System.out.println(redisUtil.stringRedisTemplate('redis2').opsForValue().get('test'));}
原理
使用ImportBeanDefinitionRegistrar BeanDefinitionBuilder.genericBeanDefinition動(dòng)態(tài)注入Bean其實(shí)很簡單有興趣可以去看看源碼,這樣的依賴集成是不是簡單了很多呢?
希望大家能夠支持開源,給個(gè)小星星,后續(xù)還會(huì)繼續(xù)開發(fā)其他依賴的整合,甚至兼容其他框架使用。fastdep讓java整合依賴更簡單。在此也招募有志同道合的coder共同完善這個(gè)項(xiàng)目。
到此這篇關(guān)于Spring boot如何快速的配置多個(gè)Redis數(shù)據(jù)源的文章就介紹到這了,更多相關(guān)Spring boot多個(gè)Redis數(shù)據(jù)源內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. 在Android中使用WebSocket實(shí)現(xiàn)消息通信的方法詳解2. python matplotlib:plt.scatter() 大小和顏色參數(shù)詳解3. Yii2.0引入CSS,JS文件方法4. JSP數(shù)據(jù)交互實(shí)現(xiàn)過程解析5. Python importlib動(dòng)態(tài)導(dǎo)入模塊實(shí)現(xiàn)代碼6. vue使用webSocket更新實(shí)時(shí)天氣的方法7. 淺談python出錯(cuò)時(shí)traceback的解讀8. android studio 打包自動(dòng)生成版本號(hào)與日期,apk輸入路徑詳解9. Nginx+php配置文件及原理解析10. JavaMail 1.4 發(fā)布
