Docker環境下秒建Redis集群,連SpringBoot也整上了!

摘要

為了提高Redis的存儲容量和響應速度,有時候我們需要搭建Redis集群。本文主要講述Redis集群環境的搭建步驟以及如何在SpringBoot中整合使用Redis集群。

Redis集群搭建

這裡我們使用最方便的搭建方式,使用Docker Compose來搭建,對Docker Compose不瞭解的朋友可以參考下《使用Docker Compose部署SpringBoot應用》。我們將搭建一個6節點的Redis集群,包括3個主節點和3個從節點。

  • 在搭建Redis集群之前,我們需要修改下Redis的配置文件redis.conf,該文件的下載地址:github.com/antirez/red…
  • 需要修改的屬性如下,主要是修改了一些集群配置和運行端口,端口號需要按需修改為6391~6396:
<code># 開啟集群功能
cluster-enabled yes
# 設置運行端口
port 6391
# 設置節點超時時間,單位毫秒
cluster-node-timeout 15000
# 集群內部配置文件
cluster-config-file "nodes-6391.conf"
複製代碼/<code>
  • 從docker-compose.yml文件中我們可以看到,我們的Redis容器分別運行在6391~6396這6個端口之上, 將容器中的/config配置目錄映射到了宿主機的/mydata/redis-cluster/config目錄,同時還以redis.sh腳本作為該容器的啟動腳本;
  • redis.sh腳本的作用是根據environment環境變量中的PORT屬性,以指定配置文件來啟動Redis容器;
<code>redis-server  /config/nodes-${PORT}.conf
/<code>
  • 接下來我們需要把Redis的配置文件和redis.sh上傳到Linux服務器的/mydata/redis-cluster/config目錄下;


Docker環境下秒建Redis集群,連SpringBoot也整上了!


  • 接下來上傳我們的docker-compose.yml文件到Linux服務器,並使用docker-compose命令來啟動所有容器;
<code>docker-compose up -d/<code>
  • 啟動過程中會輸出如下信息;


Docker環境下秒建Redis集群,連SpringBoot也整上了!


  • 此時進入其中一個Redis容器之中,初始化Redis集群;
<code># 進入Redis容器
docker exec -it redis-master1 /bin/bash
# 初始化Redis集群命令
redis-cli --cluster create \\
192.168.6.139:6391 192.168.6.139:6392 192.168.6.139:6393 \\
192.168.6.139:6394 192.168.6.139:6395 192.168.6.139:6396 \\
--cluster-replicas 1/<code>
  • 集群創建過程中會讓你確認配置,輸入yes確認即可;


Docker環境下秒建Redis集群,連SpringBoot也整上了!


  • Redis集群創建成功後會輸出如下信息;
Docker環境下秒建Redis集群,連SpringBoot也整上了!


  • 創建成功後我們可以使用redis-cli命令連接到其中一個Redis服務;
<code># 單機模式啟動
redis-cli -h 127.0.0.1 -p 6391
# 集群模式啟動
redis-cli -c -h 127.0.0.1 -p 6391/<code>
  • 之後通過cluster nodes命令可以查看節點信息,發現符合原來3主3從的預期。


Docker環境下秒建Redis集群,連SpringBoot也整上了!


SpringBoot中使用Redis集群

我們在《Spring Data Redis 最佳實踐!》中講到了在SpringBoot中如何使用Redis,用的是單節點的Redis服務,這次我們講下如何使用Redis集群服務。

  • 我們在原來代碼的基礎上進行改造,修改application.yml配置文件,添加Redis集群配置;
<code>spring:
redis:
# host: 192.168.6.139 # Redis服務器地址
# database: 0 # Redis數據庫索引(默認為0)
# port: 6379 # Redis服務器連接端口
password: # Redis服務器連接密碼(默認為空)
timeout: 3000ms # 連接超時時間
lettuce:
pool:
max-active: 8 # 連接池最大連接數
max-idle: 8 # 連接池最大空閒連接數
min-idle: 0 # 連接池最小空閒連接數
max-wait: -1ms # 連接池最大阻塞等待時間,負值表示沒有限制
cluster:
nodes:
- 192.168.6.139:6391
- 192.168.6.139:6392
- 192.168.6.139:6393
- 192.168.6.139:6394
- 192.168.6.139:6395
- 192.168.6.139:6396/<code>
  • 此時我們再次調用獲取品牌詳情的接口,就會把品牌信息緩存到Redis集群中去了;
  • 由於Redis容器redis-master1和redis-slave2互為主從,所以裡面都緩存了相同的品牌詳情信息。


Docker環境下秒建Redis集群,連SpringBoot也整上了!


作者:MacroZheng
鏈接:https://juejin.im/post/5e81fd1ff265da47e84e5e2c


分享到:


相關文章: