Redis結(jié)合 Docker 搭建集群并整合SpringBoot的詳細(xì)過(guò)程
軟件版本
Redis 7.2.5
Docker 26.1.3
準(zhǔn)備工作
由于docker直接拉取運(yùn)行了,所以需要提前準(zhǔn)備配置文件
Index of /releases/ (redis.io)
下載后,把redis-7.2.5.tar.gz\redis-7.2.5.tar\redis-7.2.5\里的
redis.conf
復(fù)制出來(lái)
概覽

結(jié)構(gòu)如上圖所示,準(zhǔn)備6個(gè)服務(wù)器。
配置各節(jié)點(diǎn)
1.創(chuàng)建 redis-cluster 目錄
2.創(chuàng)建 redis-cluster/docker-compose.yml 文件
services:
redis-cluster:
image: redis:7.2.5
ports:
- "6379:6379"
- "16379:16379"
volumes:
- ./data:/data
restart: always
command: redis-server /data/redis.conf3.創(chuàng)建 redis-cluster/data 目錄
4.配置文件復(fù)制到 redis-cluster/data/redis.conf
5.添加/覆蓋配置項(xiàng)
#注釋掉這項(xiàng): #bind 127.0.0.1 -::1 logfile "/data/redis.log" appendonly yes cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 #這個(gè)是 Docker 關(guān)鍵配置,不然發(fā)給其他節(jié)點(diǎn)的是容器內(nèi)部ip: cluster-announce-ip <當(dāng)前節(jié)點(diǎn)IP>
6.在六個(gè)節(jié)點(diǎn)分別執(zhí)行上述5個(gè)步驟
啟動(dòng)集群
1.啟動(dòng)所有節(jié)點(diǎn)
cd 到 redis-cluster 目錄,執(zhí)行 docker compose up -d
2.創(chuàng)建集群
進(jìn)入任意節(jié)點(diǎn)的 redis 容器內(nèi),執(zhí)行如下命令:
redis-cli --cluster create \ <節(jié)點(diǎn)1的IP>:6379 \ <節(jié)點(diǎn)2的IP>:6379 \ <節(jié)點(diǎn)3的IP>:6379 \ <節(jié)點(diǎn)4的IP>:6379 \ <節(jié)點(diǎn)5的IP>:6379 \ <節(jié)點(diǎn)6的IP>:6379 \ --cluster-replicas 1
按提示輸入yes:
![]()
創(chuàng)建成功提示如下:
![]()
整合SpringBoot
1.添加依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>2.添加配置
spring:
data:
redis:
cluster:
nodes:
- <哨兵1節(jié)點(diǎn)IP>:6379
- <哨兵2節(jié)點(diǎn)IP>:6379
- <哨兵3節(jié)點(diǎn)IP>:6379
- <哨兵4節(jié)點(diǎn)IP>:6379
- <哨兵5節(jié)點(diǎn)IP>:6379
- <哨兵6節(jié)點(diǎn)IP>:6379
lettuce:
cluster:
refresh:
adaptive: true3.配置讀寫分離
不建議配,除非主節(jié)點(diǎn)壓力很大,主節(jié)點(diǎn)新數(shù)據(jù)更新到從節(jié)點(diǎn)需要時(shí)間,這段時(shí)間會(huì)出現(xiàn)數(shù)據(jù)不一致。
@Configuration
public class RedisConfig {
@Bean
public LettuceClientConfigurationBuilderCustomizer clientConfigurationBuilderCustomizer() {
return builder -> builder.readFrom(ReadFrom.REPLICA_PREFERRED);
}
}4.完成,可直接使用 RedisTemplate
擴(kuò)展重新分配哈希槽
執(zhí)行:
redis-cli --cluster reshard <任意節(jié)點(diǎn)IP>:6379
輸入分配的哈希槽數(shù)量:

輸入分配給的節(jié)點(diǎn)ID:

輸入用于分配哈希槽的節(jié)點(diǎn),可以直接輸入all:

確認(rèn)分配計(jì)劃輸入yes:

完畢。
節(jié)點(diǎn)管理
# 添加新主節(jié)點(diǎn) redis-cli --cluster add-node <新節(jié)點(diǎn)IP>:6379 <任意節(jié)點(diǎn)IP>:6379 # 添加新從節(jié)點(diǎn) # 由于沒指定主節(jié)點(diǎn),新添加的從節(jié)點(diǎn)會(huì)分配給副本最少的主節(jié)點(diǎn) redis-cli --cluster add-node <新節(jié)點(diǎn)IP>:6379 <任意節(jié)點(diǎn)IP>:6379 --cluster-slave # 添加新從節(jié)點(diǎn),并指定主節(jié)點(diǎn) redis-cli --cluster add-node <新節(jié)點(diǎn)IP>:6379 <任意節(jié)點(diǎn)IP>:6379 --cluster-slave --cluster-master-id <主節(jié)點(diǎn)ID> # 刪除節(jié)點(diǎn) # 從節(jié)點(diǎn)可直接刪除,主節(jié)點(diǎn)必須先轉(zhuǎn)移哈希槽 redis-cli --cluster del-node <任意節(jié)點(diǎn)IP>:6379 <待刪節(jié)點(diǎn)ID> # 查看所有集群節(jié)點(diǎn)信息 redis-cli --cluster check <任意節(jié)點(diǎn)IP>:6379
參考資料
Scale with Redis Cluster | Docs
99_springboot整合redis之連接集群-下集_嗶哩嗶哩_bilibili
到此這篇關(guān)于Redis 結(jié)合 Docker 搭建集群并整合SpringBoot的文章就介紹到這了,更多相關(guān)Redis Docker 集群整合SpringBoot內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Redis庫(kù)存超賣問(wèn)題的分析
在高并發(fā)場(chǎng)景下進(jìn)行優(yōu)惠券秒殺測(cè)試時(shí),發(fā)現(xiàn)由于并發(fā)操作導(dǎo)致了超賣問(wèn)題,即理論上只能賣出100個(gè)優(yōu)惠券,實(shí)際賣出了102個(gè),分析原因,是因?yàn)樵诟卟l(fā)環(huán)境下,多個(gè)線程同時(shí)操作庫(kù)存,導(dǎo)致數(shù)據(jù)不一致,提出了兩種解決方案:悲觀鎖和樂(lè)觀鎖2024-11-11
Redis?中使用?list,streams,pub/sub?幾種方式實(shí)現(xiàn)消息隊(duì)列的問(wèn)題
這篇文章主要介紹了Redis?中使用?list,streams,pub/sub?幾種方式實(shí)現(xiàn)消息隊(duì)列,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
關(guān)于redis狀態(tài)監(jiān)控和性能調(diào)優(yōu)詳解
Redis是一種高級(jí)key-value數(shù)據(jù)庫(kù)。它跟memcached類似,不過(guò)數(shù)據(jù)可以持久化,而且支持的數(shù)據(jù)類型很豐富。有字符串,鏈表、哈希、集合和有序集合5種。下面這篇文章主要給大家介紹了關(guān)于redis狀態(tài)監(jiān)控和性能調(diào)優(yōu)的相關(guān)資料,需要的朋友可以參考下。2017-09-09
redis中hash數(shù)據(jù)結(jié)構(gòu)及說(shuō)明
這篇文章主要介紹了redis中hash數(shù)據(jù)結(jié)構(gòu)及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01

