SpringBoot整合Redisson實戰(通過redisson-spring-boot-starter)
點進來看整合的小夥伴肯定都瞭解Redisson的概念和背景了,這裏就直接開始;
SpringBoot整合Redisson有個比較好用的starter包就是redisson-spring-boot-starter,這也是官方比較推薦的配置方式,本文就使用redisson-spring-boot-starter來配置一個RedissonClient。
Maven依賴
<!--redisson-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.13.6</version>
<exclusions>
<exclusion>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-data-23</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-data-21</artifactId>
<version>3.13.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
關於版本,直接去官網找下最新版即可,通過 redisson-spring-data-xx來適配spring的版本
上圖就是適配spring2.x版本的配置;
PS: 這邊也要引一下redis,redisson與redis在項目中都要用到
配置實踐
edisson-spring-boot-starter這個包下只有3個類,源碼比較易讀,基本上看着代碼就可以配置就可以了,這裏就配置一套單節點的redis,採用.yml文件的格式;
上述的官網中給出了配置模板,所有的配置項都給出來了,這裏給出一個比較簡潔的實踐:
application.yml 文件
spring.redis:
enable: true
# Connection URL, will override host, port and password (user will be ignored), e.g. redis://user:[email protected]:6379
url: 配置你的地址
timeout: 2000 # 連接或讀取超時時長(毫秒)
database: 7
redisson:
file: classpath:redisson.yml
jedis:
pool:
max-active: 8 # 連接池最大連接數(使用負值表示沒有限制)
max-wait: 800 # 連接池最大阻塞等待時間(使用負值表示沒有限制)
max-idle: 8 # 連接池中的最大空閒連接
min-idle: 2 # 連接池中的最小空閒連接
這裏通過spring.redis.redisson.file 來指定redisson的配置文件名稱,和redis的配置分開放,這樣做的好處就是比較清晰
redisson.yml 文件
# 單節點配置
singleServerConfig:
# 連接空閒超時,單位:毫秒
idleConnectionTimeout: 10000
# 連接超時,單位:毫秒
connectTimeout: 10000
# 命令等待超時,單位:毫秒
timeout: 3000
# 命令失敗重試次數,如果嘗試達到 retryAttempts(命令失敗重試次數) 仍然不能將命令發送至某個指定的節點時,將拋出錯誤。
# 如果嘗試在此限制之內發送成功,則開始啓用 timeout(命令等待超時) 計時。
retryAttempts: 3
# 命令重試發送時間間隔,單位:毫秒
retryInterval: 1500
# 密碼
password: redis.shbeta
# 單個連接最大訂閱數量
subscriptionsPerConnection: 5
# 客戶端名稱
clientName: axin
# # 節點地址
address: redis://[email protected]:36479
# 發佈和訂閱連接的最小空閒連接數
subscriptionConnectionMinimumIdleSize: 1
# 發佈和訂閱連接池大小
subscriptionConnectionPoolSize: 50
# 最小空閒連接數
connectionMinimumIdleSize: 32
# 連接池大小
connectionPoolSize: 64
# 數據庫編號
database: 6
# DNS監測時間間隔,單位:毫秒
dnsMonitoringInterval: 5000
# 線程池數量,默認值: 當前處理核數量 * 2
#threads: 0
# Netty線程池數量,默認值: 當前處理核數量 * 2
#nettyThreads: 0
# 編碼
codec: !<org.redisson.codec.JsonJacksonCodec> {}
# 傳輸模式
transportMode : "NIO"
可以看到我再這裏邊配置 database: 6 ,當你使用 RedissonClient 時,會操作 redis 的 第6個分區。使用 RedisTemplate 則會操作第7個分區,在生產中最好配置一致。
配置的時候是參照 Config.java 這個類配置的,這個類在 package org.redisson.config 下;如果你想配置集羣模式的Redisson,就點 Config 的成員變量 ClusterServersConfig 去看下里邊有哪些可配置項;
使用 RedissonClient
配置好後,就可以直接在項目中注入 RedissonClient 就可以了
樣例如下:
@RestController
public class RedissonController {
@Autowired
private RedissonClient redissonClient;
@GetMapping(value = "/redisson/{key}")
public String redissonTest(@PathVariable("key") String lockKey) {
RLock lock = redissonClient.getLock(lockKey);
try {
lock.lock();
Thread.sleep(10000);
} catch (Exception e) {
} finally {
lock.unlock();
}
return "已解鎖";
}
}