Springboot2.x整合同時操作多個Redis庫
原理
直接通過配置注入多個RedisTemplate,需要用到哪個庫時直接使用對應的RedisTemplate即可。
第一步:建立專案指定Maven依賴:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.1</version>
</dependency>
<!-- 解決java8新日期API反序列化異常:com.fasterxml.jackson.databind.exc.InvalidDefinitionException-->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--redis預設使用的Lettuce客戶端-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--使用預設的Lettuce時,若配置spring.redis.lettuce.pool則必須配置該依賴-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
第二步:application.yml
redis:
database:
db1: 5
db2: 7
host: 127.0.0.1
port: 6379
password: 123456
timeout: 1000
pool:
max-active: 100
max-idle: 3
min-idle: 0
max-wait: -1
第三步:Redis配置檔案
@Configuration
public class RedisConfig {
@Value("${redis.database.db1}")
private int db1;
@Value("${redis.database.db2}")
private int db2;
@Value("${redis.host}")
private String host;
@Value("${redis.port}")
private int port;
@Value("${redis.password}")
private String password;
@Value("${redis.timeout}")
private int timeout;
@Value("${redis.pool.max-active}")
private int maxActive;
@Value("${redis.pool.max-idle}")
private int maxIdle;
@Value("${redis.pool.min-idle}")
private int minIdle;
@Value("${redis.pool.max-wait}")
private int maxWait;
@Bean
public GenericObjectPoolConfig getPoolConfig(){
// 配置redis連線池
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setMaxTotal(maxActive);
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMinIdle(minIdle);
poolConfig.setMaxWaitMillis(maxWait);
return poolConfig;
}
@Bean(name = "redisTemplate1")
public StringRedisTemplate getRedisTemplate1(){
return getStringRedisTemplate(db1);
}
@Bean(name = "redisTemplate2")
public StringRedisTemplate getRedisTemplate2(){
// 構建工廠物件
return getStringRedisTemplate(db2);
}
private StringRedisTemplate getStringRedisTemplate(int database) {
// 構建工廠物件
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
config.setHostName(host);
config.setPort(port);
//config.setPassword(RedisPassword.of(password));
LettucePoolingClientConfiguration clientConfig = LettucePoolingClientConfiguration.builder()
.commandTimeout(Duration.ofSeconds(timeout))
.poolConfig(getPoolConfig())
.build();
LettuceConnectionFactory factory = new LettuceConnectionFactory(config, clientConfig);
// 設定使用的redis資料庫
factory.setDatabase(database);
// 重新初始化工廠
factory.afterPropertiesSet();
return new StringRedisTemplate(factory);
}
}
第四步:測試程式碼
@SpringBootTest
public class DemoTest {
@Resource(name = "redisTemplate1")
private StringRedisTemplate redisTemplate1;
@Resource(name = "redisTemplate2")
private StringRedisTemplate redisTemplate2;
@Test
public void fun1() {
// 向redis中存值
redisTemplate1.opsForValue().set("name", "zhangsan");
redisTemplate2.opsForValue().set("name", "lisi");
}
@Test
public void fun2() {
// 向redis中存值同時指定過期時間
redisTemplate1.opsForValue().set("name", "zhangsan");
redisTemplate1.expire("name",3, TimeUnit.MINUTES);
redisTemplate2.opsForValue().set("name", "lisi");
redisTemplate2.expire("name",3, TimeUnit.MINUTES);
}
}
相關文章
- PHP同時操作多個MySQL連線PHPMySql
- 協作多工庫
- securecrt同時操作多個會話視窗Securecrt會話
- django操作多資料庫Django資料庫
- 關於資料庫操作多個操作組合的處理資料庫
- SpringBoot2.X與redis Lettuce整合踩坑Spring BootRedis
- Redis面試題-Redis 16個資料庫Redis面試題資料庫
- 專案合同管理:提供合同自動化與活動實時檢視
- springboot2.X手冊:redis的7種型別100個方法全解析Spring BootRedis型別
- redis-24.主從複製-實操Redis
- RMAN備份恢復整個庫
- 利用RMAN恢復整個資料庫資料庫
- 菜鳥直播挑戰:1小時創作多人遊戲遊戲
- Redis多個資料庫的概念Redis資料庫
- 【Redis】Redis叢集主從調整演算法Redis演算法
- redis實現分散式鎖---實操---問題解決Redis分散式
- 面試官:Redis 主從複製時網路開小差了怎麼整?面試Redis
- 【故障公告】1個儲存過程拖垮整個資料庫儲存過程資料庫
- 企業訂立ERP軟體合同時需要注意的七個事項(轉)
- ORM實操之資料庫遷移ORM資料庫
- Springboot2.x整合lettuce連線redis叢集報超時異常Command timed out after 6 second(s)Spring BootRedis
- Redis16個資料庫都是什麼?Redis資料庫
- 一個工作多年的嵌入式工程師漫談工程師
- 【redis前傳】redis整數集為什麼不能降級Redis
- AIX 調整時區AI
- 賣合同資料搞個生活費沒問題
- 《Redis官方文件》Redis事件庫Redis事件
- ZMap:一小時掃描整個網際網路
- 整庫(whole)備份-一致性整庫備份
- 工作多少年才能買房?
- Redis資料結構之整數集合Redis資料結構
- 一個比 Redis 效能更強的資料庫Redis資料庫
- Rb(redis blaster),一個為 redis 實現 non-replicated 分片的 python 庫RedisASTPython
- 整庫(whole)備份-非一致性整庫備份
- 成本補償合同
- linux時間調整Linux
- 請問laraveld的redis中有$redis->expires(key,過期時間)這個方法嗎LaravelRedis
- mysql資料庫-備份與還原實操MySql資料庫