天天看點

Spring Boot 內建Redis叢集

作者:簡簡單單程式員

內建Redis作為緩存或資料存儲系統具有以下幾個重要的原因:

  1. 提升性能:Redis是一種高性能的記憶體資料庫,它以鍵值對的方式存儲資料,并且資料存儲在記憶體中,是以讀寫速度非常快。通過将熱點資料存儲在Redis中,可以顯著提升應用程式的響應速度和吞吐量。
  2. 緩存支援:Redis提供了對緩存的支援,可以将經常通路的資料緩存到Redis中,以減少對後端資料庫的頻繁通路。由于Redis的高速讀寫能力,可以大大減少資料庫負載,提高系統的整體性能和可擴充性。
  3. 分布式鎖:在分布式環境中,確定資料的一緻性和避免并發沖突是一個挑戰。Redis提供了分布式鎖的功能,可以幫助開發人員實作對共享資源的安全通路。通過使用Redis的分布式鎖,可以防止多個執行個體同時修改同一資料,確定資料的正确性和完整性。
  4. 釋出/訂閱功能:Redis支援釋出/訂閱模式,可以實作實時消息的傳遞和廣播。這對于需要實時通知或實時資料更新的應用程式非常有用。例如,在聊天應用程式或實時資料監控系統中,可以使用Redis的釋出/訂閱功能實作消息的實時傳遞。
  5. 計數器和排行榜:Redis提供了原子性的操作,可以用于實作計數器和排行榜等功能。開發人員可以使用Redis的原子遞增和遞減操作來實作對資料的計數,或者使用有序集合來存儲和排名資料,如使用者積分排行榜。
  6. 會話管理:對于需要跨多個伺服器執行個體管理使用者會話的應用程式,Redis可以用作會話存儲。将會話資料存儲在Redis中可以實作會話的共享和集中管理,提高應用程式的可伸縮性和容錯性。

綜上所述,內建Redis在Java項目中可以提供高性能的緩存支援、分布式鎖、實時消息傳遞、計數器和排行榜等功能,以及會話管理等優勢,進而改善應用程式的性能、擴充性和可靠性。

Redis叢集具有以下優點:

  1. 高可用性:Redis叢集提供了主從複制和故障轉移功能,當其中一個節點失敗時,系統可以自動切換到其他可用節點,保證服務的高可用性。這樣可以避免單點故障導緻整個系統不可用的情況發生。
  2. 提高性能:Redis叢集允許在多個節點上進行資料分片,每個節點負責處理一部分資料。這種資料分片方式可以提高系統的并發處理能力和讀寫性能,因為多個節點可以并行處理請求和存儲資料。
  3. 擴充性:随着業務的增長,資料量也會增加,通過使用Redis叢集可以輕松地擴充存儲容量。當資料量超過單個節點的存儲能力時,可以簡單地添加新的節點來擴充叢集的存儲容量和性能。
  4. 負載均衡:Redis叢集會自動進行資料分布和負載均衡,将資料均勻地分布到各個節點上。這樣可以避免某個節點負載過高,而其他節點負載過低的情況,保證系統整體的負載均衡。
  5. 資料備援和備份:Redis叢集使用主從複制機制,将主節點的資料複制到從節點上,實作資料的備援和備份。當主節點發生故障時,可以自動切換到從節點,確定資料的可用性和持久性。
  6. 故障恢複:Redis叢集支援故障自動轉移功能,當主節點發生故障時,系統可以自動選擇一個從節點作為新的主節點,保證系統的連續可用性。這種故障轉移的機制可以大大減少系統停機時間和人工幹預的需求。

引用Spring Boot Redis依賴

# pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>${org.springframework.boot}</version>
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>${jedis}</version>
</dependency>           

配置Redis 叢集連結池

# platform-config/src/main/resources/application-redis.yml.vm
# maven 編譯後會自動在每個項目的class目錄下生成application-redis.yml。

## Duration轉換字元串方式,預設為正,負以-開頭,緊接着P,(字母不區分大小寫)D :天 T:天和小時之間的分隔符 H :小時  M:分鐘  S:秒 每個機關都必須是數字,且時分秒順序不能亂。例如PT20M,就是設定為20分鐘,

# group ID: com.tinem
# data ID: redis.yaml
spring:
 redis:
  timeout: 1000
  jedis:
   pool:
    # 連接配接池中的最大空閑連接配接
    max-idle: 10
    # 連接配接池中的最小空閑連接配接
    min-idle: 5
    # 連接配接池最大連接配接數(使用負值表示沒有限制)
    max-active: 10
    # 連接配接池最大阻塞等待時間(使用負值表示沒有限制))
    max-wait: PT3S
    # 每ms運作一次空閑連接配接回收器(獨立線程)
    time-between-eviction-runs: PT1M
  cluster:
   max-redirects: 3
   nodes:
		# redis叢集節點位址
    - ${REDIS_SERVER_HOST_1}:${REDIS_SERVER_PORT_1:7000}
    - ${REDIS_SERVER_HOST_2}:${REDIS_SERVER_PORT_2:7000}
    - ${REDIS_SERVER_HOST_3}:${REDIS_SERVER_PORT_3:7000}
    - ${REDIS_SERVER_HOST_4}:${REDIS_SERVER_PORT_4:7000}
    - ${REDIS_SERVER_HOST_5}:${REDIS_SERVER_PORT_5:7000}
    - ${REDIS_SERVER_HOST_6}:${REDIS_SERVER_PORT_6:7000}           

在多子產品項目中如果需要啟用Redis則在application.yaml中引用Redis配置檔案

spring:
  profiles:
    include: redis           
Spring Boot 內建Redis叢集

代碼建議

  1. redis的key盡量使用英文冒号【:】分隔,很多redis可視化客戶可以通過:給redis key做目錄區分。
Spring Boot 內建Redis叢集
  1. redis的key在保持可讀性的情況下盡量短。
  2. 盡量使用字元串類型來存儲,友善我們調試問題,如果是要存對象可以使用redis的hash資料結構或者使用json序列化對象,會造成一些性能損耗,但是一般問題不大。
  3. 所有的key都要設定過期時間,如果不确定過期時間,可以設定的長一些。但一定不要不設定。

Redis叢集可視化管理工具

AnotherRedisDesktopManager

https://github.com/qishibo/AnotherRedisDesktopManager

Spring Boot 內建Redis叢集

繼續閱讀