SpringBoot整合Redisson實戰(通過redisson-spring-boot-starter)

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的配置分開放,這樣做的好處就是比較清晰

image

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 "已解鎖";
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章