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);
}
}
相關文章
- 協作多工庫
- django操作多資料庫Django資料庫
- SpringBoot2.X與redis Lettuce整合踩坑Spring BootRedis
- springboot2.X手冊:redis的7種型別100個方法全解析Spring BootRedis型別
- Redis面試題-Redis 16個資料庫Redis面試題資料庫
- redis-24.主從複製-實操Redis
- 專案合同管理:提供合同自動化與活動實時檢視
- Springboot2.x整合lettuce連線redis叢集報超時異常Command timed out after 6 second(s)Spring BootRedis
- Redis多個資料庫的概念Redis資料庫
- 菜鳥直播挑戰:1小時創作多人遊戲遊戲
- 【故障公告】1個儲存過程拖垮整個資料庫儲存過程資料庫
- 一個工作多年的嵌入式工程師漫談工程師
- 【Redis】Redis叢集主從調整演算法Redis演算法
- redis實現分散式鎖---實操---問題解決Redis分散式
- ORM實操之資料庫遷移ORM資料庫
- SpringBoot2.x入門:快速建立一個SpringBoot應用Spring Boot
- Redis16個資料庫都是什麼?Redis資料庫
- 面試官:Redis 主從複製時網路開小差了怎麼整?面試Redis
- Rb(redis blaster),一個為 redis 實現 non-replicated 分片的 python 庫RedisASTPython
- AI為Spring Boot整個程式碼庫新增了註釋AISpring Boot
- 【redis前傳】redis整數集為什麼不能降級Redis
- 一個比 Redis 效能更強的資料庫Redis資料庫
- 提供合同自動化與活動實時檢視
- 賣合同資料搞個生活費沒問題
- Redis資料結構之整數集合Redis資料結構
- 6 個 Python 的日期時間庫Python
- springboot2.x基礎教程:動手製作一個starter包Spring Boot
- mysql資料庫-備份與還原實操MySql資料庫
- 使用 Infinispan 快取功能支援多個 Redis 資料庫快取Redis資料庫
- 中小企業簽署ERP合同時,需要留意這幾點
- Linux 上製作多啟動 U 盤Linux
- 工作多年後再來聊聊IO
- 資料庫-Redis資料庫Redis
- 同時剪輯多個視訊,批量調整多個視訊的播放速度
- 『你工作多久可以買個 iPhone X 』今日資料行業日報(2018.06.04)iPhone行業
- 請問laraveld的redis中有$redis->expires(key,過期時間)這個方法嗎LaravelRedis
- 輸入一個整數,返回這個整數的位數
- 成本補償合同