Redis 同步機(jī)制全面解析
一、Redis 同步機(jī)制的核心與價(jià)值
1.1 核心需求:數(shù)據(jù)備份與讀寫分離
數(shù)據(jù)備份
在實(shí)際生產(chǎn)環(huán)境中,單機(jī)Redis實(shí)例存在多種風(fēng)險(xiǎn):
- 服務(wù)器硬件故障導(dǎo)致數(shù)據(jù)永久丟失
- 操作系統(tǒng)崩潰導(dǎo)致內(nèi)存數(shù)據(jù)未持久化
- 誤操作刪除關(guān)鍵數(shù)據(jù)
通過同步機(jī)制建立主從架構(gòu),可以實(shí)現(xiàn):
- 多副本存儲(chǔ):數(shù)據(jù)至少存在于2個(gè)節(jié)點(diǎn)(1主1從),典型配置為1主2從
- 容災(zāi)恢復(fù):當(dāng)主節(jié)點(diǎn)故障時(shí),可快速提升從節(jié)點(diǎn)為新主節(jié)點(diǎn)
- 數(shù)據(jù)持久化保障:結(jié)合RDB和AOF持久化策略,即使主節(jié)點(diǎn)完全損壞,從節(jié)點(diǎn)也能提供完整的數(shù)據(jù)恢復(fù)點(diǎn)
示例場(chǎng)景:電商平臺(tái)商品庫存數(shù)據(jù),通過同步機(jī)制確保即使主節(jié)點(diǎn)宕機(jī),從節(jié)點(diǎn)也能繼續(xù)提供服務(wù),避免超賣。
讀寫分離
Redis的主從架構(gòu)天然支持讀寫分離:
- 主節(jié)點(diǎn)(Master):處理所有寫入操作(SET, INCR等)和部分關(guān)鍵讀請(qǐng)求
- 從節(jié)點(diǎn)(Slave):處理90%以上的讀請(qǐng)求(GET, HGET等),支持配置多個(gè)從節(jié)點(diǎn)實(shí)現(xiàn)水平擴(kuò)展
優(yōu)勢(shì)體現(xiàn):
- 提升系統(tǒng)整體吞吐量:讀性能隨從節(jié)點(diǎn)數(shù)量線性增長(zhǎng)
- 降低主節(jié)點(diǎn)負(fù)載:將CPU密集型操作(如復(fù)雜Lua腳本)分流到從節(jié)點(diǎn)
- 實(shí)現(xiàn)地域就近訪問:在不同機(jī)房部署從節(jié)點(diǎn),減少網(wǎng)絡(luò)延遲
典型應(yīng)用:
- 社交平臺(tái):主節(jié)點(diǎn)處理發(fā)帖/點(diǎn)贊等寫操作,從節(jié)點(diǎn)處理信息流展示
- 內(nèi)容管理系統(tǒng):主節(jié)點(diǎn)處理內(nèi)容更新,從節(jié)點(diǎn)處理內(nèi)容查詢
1.2 關(guān)鍵目標(biāo):高效、可靠、低延遲
高效性實(shí)現(xiàn)
Redis采用智能復(fù)制策略平衡效率:
- 全量復(fù)制:
- 初次連接時(shí)執(zhí)行
- 通過RDB快照完成
- 優(yōu)化措施:支持無盤復(fù)制(diskless replication)
- 增量復(fù)制:
- 基于復(fù)制積壓緩沖區(qū)(repl-backlog-buffer)
- 默認(rèn)大小1MB,可根據(jù)網(wǎng)絡(luò)質(zhì)量調(diào)整
- 僅傳輸變更命令,大幅減少帶寬占用
配置建議:
repl-backlog-size 16mb # 提升緩沖區(qū)大小應(yīng)對(duì)網(wǎng)絡(luò)不穩(wěn)定 repl-diskless-sync yes # 啟用無盤復(fù)制加速全量同步
可靠性保障
Redis通過多種機(jī)制確保同步可靠性:
- 斷點(diǎn)續(xù)傳:基于復(fù)制偏移量(replication offset)記錄同步進(jìn)度
- 心跳檢測(cè):主從定期(默認(rèn)10秒)PING-PONG通信
- 自動(dòng)重連:網(wǎng)絡(luò)恢復(fù)后自動(dòng)重新建立同步連接
- 數(shù)據(jù)校驗(yàn):使用CRC64校驗(yàn)和驗(yàn)證數(shù)據(jù)一致性
低延遲優(yōu)化
為實(shí)現(xiàn)毫秒級(jí)同步延遲,Redis采用:
- TCP長(zhǎng)連接:避免頻繁建立連接的開銷
- 異步復(fù)制:主節(jié)點(diǎn)不等待從節(jié)點(diǎn)ACK繼續(xù)處理請(qǐng)求
- 延遲監(jiān)控:
INFO replication # 查看master_repl_offset和slave_repl_offset差值
- 硬件優(yōu)化:
- 主從節(jié)點(diǎn)部署在同一可用區(qū)減少網(wǎng)絡(luò)延遲
- 使用高性能網(wǎng)卡(如10Gbps)
性能指標(biāo):
- 同機(jī)房延遲:通常<1ms
- 跨機(jī)房延遲:取決于網(wǎng)絡(luò)質(zhì)量,通常<10ms
- 極端情況下可配置WAIT命令實(shí)現(xiàn)同步寫(犧牲性能換取更強(qiáng)一致性)
二、基礎(chǔ)同步:主從復(fù)制(Master-Slave Replication)
主從復(fù)制是 Redis 同步機(jī)制的基石,所有高級(jí)同步(哨兵、集群)均基于此擴(kuò)展。其核心邏輯是通過主節(jié)點(diǎn)(Master)和從節(jié)點(diǎn)(Slave)的協(xié)作,實(shí)現(xiàn)數(shù)據(jù)的分布式存儲(chǔ)和讀寫分離。從節(jié)點(diǎn)主動(dòng)連接主節(jié)點(diǎn),復(fù)制主節(jié)點(diǎn)的數(shù)據(jù)集,并實(shí)時(shí)同步主節(jié)點(diǎn)的寫操作。這種架構(gòu)設(shè)計(jì)不僅提高了系統(tǒng)的可用性,還能有效分擔(dān)主節(jié)點(diǎn)的讀請(qǐng)求壓力。
2.1 主從復(fù)制的三個(gè)核心階段
主從復(fù)制全流程分為"建立連接"、"數(shù)據(jù)同步"、"命令傳播"三個(gè)階段,缺一不可。這三個(gè)階段構(gòu)成了一個(gè)完整的數(shù)據(jù)同步生命周期,確保主從節(jié)點(diǎn)之間的數(shù)據(jù)最終一致性。
階段 1:建立連接(握手階段)
從節(jié)點(diǎn)通過配置slaveof <master-ip> <master-port>(Redis 5.0 后推薦使用更符合現(xiàn)代語義的replicaof)觸發(fā)連接流程,具體步驟如下:
- 初始化連接:
- 從節(jié)點(diǎn)啟動(dòng)后,向主節(jié)點(diǎn)發(fā)送
SYNC命令(Redis 2.8 前)或更先進(jìn)的PSYNC命令(Redis 2.8 后,支持增量復(fù)制) - 主節(jié)點(diǎn)收到命令后,首先驗(yàn)證從節(jié)點(diǎn)的
requirepass(若配置)與自身masterauth是否一致 - 驗(yàn)證通過后,主節(jié)點(diǎn)返回
+OK響應(yīng)
- 從節(jié)點(diǎn)啟動(dòng)后,向主節(jié)點(diǎn)發(fā)送
- 建立通信通道:
- 主節(jié)點(diǎn)創(chuàng)建一個(gè)專門的"復(fù)制客戶端"(用于向從節(jié)點(diǎn)發(fā)送數(shù)據(jù))
- 從節(jié)點(diǎn)創(chuàng)建"復(fù)制監(jiān)聽器"(用于接收主節(jié)點(diǎn)發(fā)送的數(shù)據(jù))
- 雙方完成TCP連接初始化,為后續(xù)數(shù)據(jù)傳輸做好準(zhǔn)備
- 連接確認(rèn):
- 從節(jié)點(diǎn)會(huì)定期發(fā)送
PING命令檢測(cè)連接狀態(tài) - 主節(jié)點(diǎn)響應(yīng)
PONG確認(rèn)連接正常
- 從節(jié)點(diǎn)會(huì)定期發(fā)送
階段 2:數(shù)據(jù)同步(全量 / 增量復(fù)制)
這是同步的核心階段,分為兩種模式:全量復(fù)制(首次同步或從節(jié)點(diǎn)斷線過久)和增量復(fù)制(從節(jié)點(diǎn)短期斷線后恢復(fù))。選擇哪種模式取決于從節(jié)點(diǎn)的同步狀態(tài)和斷開時(shí)間。
2.2.1 全量復(fù)制:從 0 到 1 復(fù)制完整數(shù)據(jù)集
當(dāng)遇到以下情況時(shí)會(huì)觸發(fā)全量復(fù)制:
- 從節(jié)點(diǎn)是全新節(jié)點(diǎn),從未同步過數(shù)據(jù)
- 從節(jié)點(diǎn)的
replid(主節(jié)點(diǎn)標(biāo)識(shí))與主節(jié)點(diǎn)不一致 - 從節(jié)點(diǎn)的復(fù)制偏移量
offset不在主節(jié)點(diǎn)的復(fù)制積壓緩沖區(qū)范圍內(nèi)
全量復(fù)制詳細(xì)流程:
- 發(fā)起請(qǐng)求:
- 從節(jié)點(diǎn)發(fā)送
PSYNC ? -1命令(表示請(qǐng)求全量復(fù)制)
- 從節(jié)點(diǎn)發(fā)送
- 主節(jié)點(diǎn)準(zhǔn)備RDB:
- 主節(jié)點(diǎn)接收到請(qǐng)求后,執(zhí)行
bgsave命令在后臺(tái)生成RDB快照文件 - 在生成RDB期間,主節(jié)點(diǎn)會(huì)緩存所有寫操作(如
SET、HSET)到"復(fù)制積壓緩沖區(qū)"
- 主節(jié)點(diǎn)接收到請(qǐng)求后,執(zhí)行
- 傳輸RDB文件:
- RDB生成完成后,主節(jié)點(diǎn)通過專用連接將RDB文件分塊傳輸給從節(jié)點(diǎn)
- 傳輸過程中使用TCP滑動(dòng)窗口機(jī)制優(yōu)化網(wǎng)絡(luò)傳輸效率
- 從節(jié)點(diǎn)加載數(shù)據(jù):
- 從節(jié)點(diǎn)收到RDB文件后,首先安全地清空自身數(shù)據(jù)集
- 然后將RDB文件加載到內(nèi)存中,重建數(shù)據(jù)庫
- 同步緩沖命令:
- 主節(jié)點(diǎn)發(fā)送完RDB后,將"復(fù)制積壓緩沖區(qū)"中的寫操作按順序發(fā)送給從節(jié)點(diǎn)
- 從節(jié)點(diǎn)執(zhí)行這些命令,確保與主節(jié)點(diǎn)數(shù)據(jù)完全一致
性能考量:
- RDB生成過程會(huì)fork子進(jìn)程,可能導(dǎo)致短暫延遲
- 網(wǎng)絡(luò)傳輸大數(shù)據(jù)量可能成為瓶頸
- 從節(jié)點(diǎn)加載RDB時(shí)會(huì)出現(xiàn)服務(wù)暫停
- 建議在業(yè)務(wù)低峰期執(zhí)行全量復(fù)制,并確保網(wǎng)絡(luò)帶寬充足
2.2.2 增量復(fù)制:僅同步斷線期間的增量數(shù)據(jù)
當(dāng)從節(jié)點(diǎn)短期斷線(如網(wǎng)絡(luò)閃斷)后重新連接,且主節(jié)點(diǎn)的"復(fù)制積壓緩沖區(qū)"仍保留斷線期間的寫操作時(shí),觸發(fā)增量復(fù)制。這種模式顯著提高了同步效率。
增量復(fù)制詳細(xì)流程:
- 重新連接:
- 從節(jié)點(diǎn)重新連接主節(jié)點(diǎn)時(shí),發(fā)送
PSYNC <replid> <offset>命令 replid是主節(jié)點(diǎn)標(biāo)識(shí),offset是從節(jié)點(diǎn)最后一次同步的位置
- 從節(jié)點(diǎn)重新連接主節(jié)點(diǎn)時(shí),發(fā)送
- 主節(jié)點(diǎn)驗(yàn)證:
- 主節(jié)點(diǎn)驗(yàn)證
replid是否與自身一致 - 檢查
offset是否在"復(fù)制積壓緩沖區(qū)"的有效范圍內(nèi)(緩沖區(qū)保留[master_offset - backlog_size, master_offset]的操作)
- 主節(jié)點(diǎn)驗(yàn)證
- 執(zhí)行增量同步:
- 驗(yàn)證通過后,主節(jié)點(diǎn)僅將
offset之后的寫操作從緩沖區(qū)發(fā)送給從節(jié)點(diǎn) - 從節(jié)點(diǎn)執(zhí)行這些增量命令,快速追上主節(jié)點(diǎn)數(shù)據(jù)狀態(tài)
- 驗(yàn)證通過后,主節(jié)點(diǎn)僅將
增量復(fù)制的關(guān)鍵條件:
- 從節(jié)點(diǎn)需正確記錄上一次同步的
replid和offset(存儲(chǔ)在replica.conf中) - 主節(jié)點(diǎn)的"復(fù)制積壓緩沖區(qū)"需足夠大,能夠容納斷線期間的寫操作
- 斷線時(shí)間未超過
repl-backlog-ttl(默認(rèn)3600秒),避免緩沖區(qū)被清空
優(yōu)化建議:
- 對(duì)于寫操作頻繁的場(chǎng)景,適當(dāng)增大
repl-backlog-size - 監(jiān)控從節(jié)點(diǎn)的復(fù)制延遲,及時(shí)發(fā)現(xiàn)潛在問題
- 定期檢查復(fù)制積壓緩沖區(qū)的使用情況
階段 3:命令傳播(實(shí)時(shí)同步寫操作)
數(shù)據(jù)同步完成后,主從進(jìn)入"命令傳播"階段,這是維持?jǐn)?shù)據(jù)一致性的關(guān)鍵環(huán)節(jié)。主節(jié)點(diǎn)每執(zhí)行一次寫命令,都會(huì)將該命令發(fā)送給所有從節(jié)點(diǎn),從節(jié)點(diǎn)執(zhí)行相同命令,確保數(shù)據(jù)實(shí)時(shí)同步。
命令傳播的詳細(xì)機(jī)制:
- 寫命令傳播流程:
- 客戶端向主節(jié)點(diǎn)發(fā)送寫命令(如
SET key value) - 主節(jié)點(diǎn)執(zhí)行命令并修改本地?cái)?shù)據(jù)
- 主節(jié)點(diǎn)將命令封裝為Redis協(xié)議格式,發(fā)送給所有從節(jié)點(diǎn)
- 從節(jié)點(diǎn)接收并執(zhí)行相同命令
- 客戶端向主節(jié)點(diǎn)發(fā)送寫命令(如
- 性能優(yōu)化策略:
- 主節(jié)點(diǎn)采用"異步發(fā)送"模式:寫命令執(zhí)行后立即返回客戶端,隨后異步將命令發(fā)送給從節(jié)點(diǎn)
- 從節(jié)點(diǎn)通過
repl-disable-tcp-nodelay配置控制TCP特性: - 默認(rèn)
no(關(guān)閉TCP_NODELAY):TCP會(huì)緩沖小數(shù)據(jù)包,減少網(wǎng)絡(luò)請(qǐng)求數(shù),但可能增加毫秒級(jí)延遲 - 設(shè)為
yes(開啟TCP_NODELAY):寫命令立即發(fā)送,延遲降低,但網(wǎng)絡(luò)請(qǐng)求數(shù)增加
- 復(fù)制偏移量監(jiān)控:
- 主從節(jié)點(diǎn)都會(huì)維護(hù)復(fù)制偏移量
offset - 通過
INFO replication可以查看主從節(jié)點(diǎn)的master_repl_offset和slave_repl_offset - 兩者的差值反映了復(fù)制延遲
- 主從節(jié)點(diǎn)都會(huì)維護(hù)復(fù)制偏移量
2.2 主從復(fù)制的核心配置
主節(jié)點(diǎn)配置
| 配置項(xiàng) | 示例值 | 說明 | 推薦設(shè)置 |
|---|---|---|---|
bind | 0.0.0.0 | 允許從節(jié)點(diǎn)遠(yuǎn)程連接 | 生產(chǎn)環(huán)境建議綁定具體IP |
protected-mode | no | 關(guān)閉保護(hù)模式 | 必須關(guān)閉才能遠(yuǎn)程連接 |
port | 6379 | 主節(jié)點(diǎn)服務(wù)端口 | 默認(rèn)6379,可修改 |
requirepass | Str0ngP@ss | 主節(jié)點(diǎn)訪問密碼 | 生產(chǎn)環(huán)境必須設(shè)置 |
masterauth | Str0ngP@ss | 主從同步驗(yàn)證密碼 | 需與從節(jié)點(diǎn)密碼一致 |
repl-backlog-size | 32mb | 復(fù)制積壓緩沖區(qū)大小 | 寫頻繁場(chǎng)景建議增大 |
repl-backlog-ttl | 3600 | 緩沖區(qū)保留時(shí)間 | 默認(rèn)3600秒(1小時(shí)) |
從節(jié)點(diǎn)配置
| 配置項(xiàng) | 示例值 | 說明 | 推薦設(shè)置 |
|---|---|---|---|
replicaof | 192.168.1.1 6379 | 指定主節(jié)點(diǎn)地址 | Redis 5.0+使用 |
slaveof | 192.168.1.1 6379 | Redis 5.0前使用 | 已棄用 |
requirepass | Str0ngP@ss | 從節(jié)點(diǎn)密碼 | 需與主節(jié)點(diǎn)masterauth一致 |
replica-read-only | yes | 從節(jié)點(diǎn)只讀模式 | 默認(rèn)開啟,防止誤寫 |
repl-disable-tcp-nodelay | yes | TCP優(yōu)化選項(xiàng) | 延遲敏感場(chǎng)景開啟 |
配置驗(yàn)證方法
- 主節(jié)點(diǎn)檢查:
redis-cli -a yourpassword info replication
- 查看
connected_slaves是否為預(yù)期的從節(jié)點(diǎn)數(shù)量,以及每個(gè)從節(jié)點(diǎn)的狀態(tài)信息。 - 從節(jié)點(diǎn)檢查:
redis-cli -a yourpassword info replication
- 確認(rèn)
master_host和master_port是否正確,master_link_status是否為up(表示連接正常)。 - 復(fù)制延遲監(jiān)控: 比較主節(jié)點(diǎn)的
master_repl_offset和從節(jié)點(diǎn)的slave_repl_offset,兩者的差值即為復(fù)制延遲。
常見問題處理
- 連接失敗:
- 檢查防火墻設(shè)置
- 驗(yàn)證密碼配置是否正確
- 確認(rèn)主節(jié)點(diǎn)
bind配置允許遠(yuǎn)程連接
- 同步中斷:
- 檢查網(wǎng)絡(luò)連接狀態(tài)
- 查看日志文件定位問題
- 適當(dāng)增大
repl-timeout(默認(rèn)60秒)
- 性能優(yōu)化:
- 對(duì)于大型數(shù)據(jù)集,考慮在低峰期執(zhí)行全量同步
- 適當(dāng)調(diào)整
repl-backlog-size避免頻繁全量同步 - 監(jiān)控復(fù)制延遲,及時(shí)發(fā)現(xiàn)性能瓶頸
三、高可用同步:哨兵模式(Sentinel)
3.1 哨兵模式的核心角色與架構(gòu)
哨兵模式是一個(gè)分布式系統(tǒng),由以下三部分組成:
- 哨兵節(jié)點(diǎn)(Sentinel):
- 獨(dú)立的Redis進(jìn)程,不存儲(chǔ)業(yè)務(wù)數(shù)據(jù)
- 主要職責(zé):
- 持續(xù)監(jiān)控主從節(jié)點(diǎn)健康狀態(tài)
- 檢測(cè)到主節(jié)點(diǎn)故障時(shí)自動(dòng)觸發(fā)故障轉(zhuǎn)移
- 通知客戶端主從拓?fù)渥兏?/li>
- 充當(dāng)服務(wù)發(fā)現(xiàn)的配置中心
- 主節(jié)點(diǎn)(Master):
- 與普通Redis主節(jié)點(diǎn)功能相同
- 需要響應(yīng)哨兵的監(jiān)控請(qǐng)求
- 向哨兵報(bào)告其從節(jié)點(diǎn)列表
- 從節(jié)點(diǎn)(Slave):
- 與普通Redis從節(jié)點(diǎn)功能相同
- 自動(dòng)被哨兵發(fā)現(xiàn)并監(jiān)控
- 在故障轉(zhuǎn)移時(shí)可能被提升為新主節(jié)點(diǎn)
架構(gòu)設(shè)計(jì)要點(diǎn):
- 哨兵節(jié)點(diǎn)數(shù)量必須≥3且為奇數(shù)(推薦3或5個(gè))
- 原因:避免腦裂,確保故障轉(zhuǎn)移需要"多數(shù)哨兵同意"的機(jī)制能正常工作
- 示例:3個(gè)哨兵時(shí),至少需要2個(gè)哨兵達(dá)成共識(shí)才能執(zhí)行故障轉(zhuǎn)移
- 主從節(jié)點(diǎn)數(shù)量可根據(jù)業(yè)務(wù)需求靈活配置
- 典型配置:1主2從+3哨兵(適合中小規(guī)模應(yīng)用)
- 大型系統(tǒng)可能采用:1主5從+5哨兵
3.2 哨兵模式的同步邏輯(故障轉(zhuǎn)移流程)
步驟1:監(jiān)控(Sentinel Monitoring)
哨兵節(jié)點(diǎn)通過以下機(jī)制實(shí)現(xiàn)全面監(jiān)控:
- 初始配置:
sentinel monitor mymaster 192.168.1.1 6379 2
mymaster:主節(jié)點(diǎn)別名192.168.1.1:6379:主節(jié)點(diǎn)地址2:判定客觀下線需要的哨兵票數(shù)
- 健康檢查機(jī)制:
- 每1秒發(fā)送
PING命令到所有被監(jiān)控節(jié)點(diǎn) - 正常響應(yīng):返回
PONG - 每10秒發(fā)送
INFO replication到主節(jié)點(diǎn) - 獲取從節(jié)點(diǎn)列表及其復(fù)制狀態(tài)
- 自動(dòng)發(fā)現(xiàn)新增的從節(jié)點(diǎn)
- 每1秒發(fā)送
- 哨兵集群通信:
- 使用Redis的Pub/Sub功能
- 每2秒通過
__sentinel__:hello頻道廣播節(jié)點(diǎn)狀態(tài) - 維護(hù)哨兵之間的共識(shí)狀態(tài)
步驟2:主觀下線與客觀下線
- 主觀下線(SDOWN):
- 觸發(fā)條件:?jiǎn)蝹€(gè)哨兵在
down-after-milliseconds(默認(rèn)30秒)內(nèi)未收到主節(jié)點(diǎn)的有效響應(yīng) - 處理動(dòng)作:該哨兵將主節(jié)點(diǎn)標(biāo)記為"主觀下線"
- 觸發(fā)條件:?jiǎn)蝹€(gè)哨兵在
- 客觀下線(ODOWN):
- 觸發(fā)流程:
- 發(fā)起投票:哨兵發(fā)送
SENTINEL is-master-down-by-addr命令詢問其他哨兵 - 收集響應(yīng):等待其他哨兵回復(fù)(包含它們對(duì)主節(jié)點(diǎn)狀態(tài)的判斷)
- 達(dá)成共識(shí):當(dāng)≥
quorum個(gè)哨兵同意主節(jié)點(diǎn)不可用時(shí),標(biāo)記為"客觀下線" - 示例:配置
quorum=2時(shí),需要至少2個(gè)哨兵確認(rèn)主節(jié)點(diǎn)故障
- 發(fā)起投票:哨兵發(fā)送
步驟3:選舉新主節(jié)點(diǎn)
選舉過程采用多級(jí)排序策略:
- 第一優(yōu)先級(jí):replica-priority
- 配置項(xiàng):
replica-priority(默認(rèn)100) - 規(guī)則:數(shù)值越小優(yōu)先級(jí)越高
- 應(yīng)用場(chǎng)景:可以手動(dòng)指定某些從節(jié)點(diǎn)優(yōu)先被選為主節(jié)點(diǎn)
- 配置項(xiàng):
- 第二優(yōu)先級(jí):復(fù)制偏移量(offset)
- 比較各從節(jié)點(diǎn)與主節(jié)點(diǎn)的數(shù)據(jù)同步進(jìn)度
- 選擇復(fù)制進(jìn)度最接近原主節(jié)點(diǎn)的從節(jié)點(diǎn)
- 確保數(shù)據(jù)丟失最少
- 第三優(yōu)先級(jí):runid
- Redis實(shí)例啟動(dòng)時(shí)生成的唯一標(biāo)識(shí)
- 按字典序選擇runid較小的節(jié)點(diǎn)
- 作為最終裁決條件
步驟4:故障轉(zhuǎn)移執(zhí)行
完整的故障轉(zhuǎn)移流程:
- 提升新主:
SLAVEOF NO ONE
- 取消新主節(jié)點(diǎn)的從屬關(guān)系
- 使其開始接受寫請(qǐng)求
- 重配置從節(jié)點(diǎn):
REPLICAOF <new-master-ip> <new-master-port>
- 所有從節(jié)點(diǎn)開始同步新主節(jié)點(diǎn)的數(shù)據(jù)
- 采用增量復(fù)制或全量復(fù)制(取決于復(fù)制偏移量)
- 舊主節(jié)點(diǎn)處理:
- 當(dāng)舊主節(jié)點(diǎn)恢復(fù)后,自動(dòng)被配置為新主節(jié)點(diǎn)的從節(jié)點(diǎn)
- 通過
INFO replication命令可以驗(yàn)證復(fù)制關(guān)系
- 客戶端通知:
- 哨兵通過
+switch-master事件通知客戶端 - 客戶端應(yīng)實(shí)現(xiàn)自動(dòng)重連機(jī)制
- 哨兵通過
3.3 哨兵模式的核心配置(實(shí)戰(zhàn))
關(guān)鍵配置詳解
| 配置項(xiàng) | 說明 | 推薦值 |
|---|---|---|
port 26379 | 哨兵服務(wù)端口 | 通常保持默認(rèn) |
sentinel monitor <name> <ip> <port> <quorum> | 定義監(jiān)控的主節(jié)點(diǎn) | 根據(jù)網(wǎng)絡(luò)環(huán)境調(diào)整 |
sentinel down-after-milliseconds <name> 30000 | 主觀下線判定時(shí)間 | 生產(chǎn)環(huán)境建議30-60秒 |
sentinel failover-timeout <name> 180000 | 故障轉(zhuǎn)移超時(shí)時(shí)間 | 根據(jù)網(wǎng)絡(luò)延遲調(diào)整 |
sentinel parallel-syncs <name> 1 | 并行同步數(shù)量 | 較大集群可適當(dāng)增加 |
配置示例
# sentinel.conf port 26379 sentinel monitor mycluster 10.0.0.1 6379 2 sentinel down-after-milliseconds mycluster 50000 sentinel failover-timeout mycluster 120000 sentinel auth-pass mycluster MySecurePassword sentinel parallel-syncs mycluster 2
運(yùn)維檢查清單
啟動(dòng)哨兵:
redis-sentinel /etc/redis/sentinel.conf
監(jiān)控命令:
redis-cli -p 26379 sentinel masters # 查看所有監(jiān)控的主節(jié)點(diǎn) redis-cli -p 26379 sentinel slaves mymaster # 查看指定主節(jié)點(diǎn)的從節(jié)點(diǎn)
故障模擬測(cè)試:
# 模擬主節(jié)點(diǎn)宕機(jī) redis-cli -p 6379 DEBUG sleep 60 # 觀察哨兵日志 tail -f /var/log/redis/sentinel.log
客戶端配置:
- 應(yīng)配置連接所有哨兵節(jié)點(diǎn)地址
- 實(shí)現(xiàn)自動(dòng)故障轉(zhuǎn)移處理邏輯
- 示例Java客戶端配置:
JedisSentinelPool pool = new JedisSentinelPool("mymaster", new HashSet<String>(Arrays.asList( "sentinel1:26379", "sentinel2:26379", "sentinel3:26379")));
四、分布式同步:Redis Cluster(集群模式)
4.1 集群模式的核心概念
分片機(jī)制詳解
Redis Cluster 使用 CRC16 算法計(jì)算 key 的哈希值,然后對(duì) 16384 取模得到對(duì)應(yīng)的哈希槽。例如:
- key "user:1001" 的 CRC16 值為 12345,則哈希槽為 12345 % 16384 = 12345
- key "product:2002" 的 CRC16 值為 54321,則哈希槽為 54321 % 16384 = 54321
哈希槽分配示例:
- 3 節(jié)點(diǎn)集群:節(jié)點(diǎn)1(0-5460)、節(jié)點(diǎn)2(5461-10922)、節(jié)點(diǎn)3(10923-16383)
- 5 節(jié)點(diǎn)集群:每個(gè)節(jié)點(diǎn)約 3276 個(gè)槽
主從復(fù)制架構(gòu)
每個(gè)主節(jié)點(diǎn)可以配置多個(gè)從節(jié)點(diǎn),形成多副本保護(hù)。從節(jié)點(diǎn)會(huì):
- 實(shí)時(shí)同步主節(jié)點(diǎn)數(shù)據(jù)
- 在主節(jié)點(diǎn)故障時(shí)參與選舉
- 可配置為可讀副本分擔(dān)讀壓力
客戶端重定向機(jī)制
當(dāng)客戶端訪問錯(cuò)誤節(jié)點(diǎn)時(shí),會(huì)收到兩種重定向響應(yīng):
- MOVED:永久重定向,表示槽已遷移到指定節(jié)點(diǎn)
- ASK:臨時(shí)重定向,發(fā)生在集群擴(kuò)容/縮容期間
4.2 集群模式的同步邏輯
4.2.1 分片內(nèi)同步優(yōu)化
- 集群感知復(fù)制:
- 從節(jié)點(diǎn)加入時(shí)通過
CLUSTER MEET發(fā)現(xiàn)拓?fù)?/li> - 只同步所屬分片的槽數(shù)據(jù)
- 定期交換集群狀態(tài)信息
- 從節(jié)點(diǎn)加入時(shí)通過
- 讀寫分離配置:
# 允許從節(jié)點(diǎn)處理讀請(qǐng)求 cluster-replica-ok yes
- 啟用后,從節(jié)點(diǎn)可以:
- 響應(yīng)本地持有的槽的讀請(qǐng)求
- 其他槽請(qǐng)求仍返回 MOVED
4.2.2 故障轉(zhuǎn)移流程詳解
- 故障檢測(cè)階段:
- 從節(jié)點(diǎn)每秒發(fā)送 PING
- 超時(shí)后標(biāo)記主節(jié)點(diǎn)為
PFail(Possible Failure) - 收集其他節(jié)點(diǎn)的確認(rèn)信息
- 選舉投票規(guī)則:
- 每個(gè)主節(jié)點(diǎn)有且只有一票
- 從節(jié)點(diǎn)按以下條件競(jìng)選:
- 復(fù)制偏移量最新
- 節(jié)點(diǎn)運(yùn)行時(shí)間最長(zhǎng)
- 節(jié)點(diǎn)ID字典序最小
- 數(shù)據(jù)同步階段:
- 新主節(jié)點(diǎn)生成新的復(fù)制ID
- 其他從節(jié)點(diǎn)執(zhí)行部分重同步(PSYNC)
- 故障期間寫入使用故障轉(zhuǎn)移標(biāo)記
4.3 集群模式的核心配置與實(shí)戰(zhàn)
配置參數(shù)詳解
| 配置項(xiàng) | 推薦值 | 說明 |
|---|---|---|
| cluster-require-full-coverage | no | 允許部分槽不可用時(shí)集群仍可服務(wù) |
| cluster-migration-barrier | 1 | 主節(jié)點(diǎn)最少從節(jié)點(diǎn)數(shù)才開始遷移 |
| cluster-replica-no-failover | no | 從節(jié)點(diǎn)是否參與故障轉(zhuǎn)移 |
集群搭建完整流程
準(zhǔn)備階段:
# 創(chuàng)建6個(gè)實(shí)例配置
for port in {6379..6384}; do
mkdir -p /redis/${port}
cp redis.conf /redis/${port}/
sed -i "s/port 6379/port ${port}/" /redis/${port}/redis.conf
done啟動(dòng)節(jié)點(diǎn):
# 啟動(dòng)所有節(jié)點(diǎn)
for port in {6379..6384}; do
redis-server /redis/${port}/redis.conf
done創(chuàng)建集群:
redis-cli --cluster create \ 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 \ 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 \ --cluster-replicas 1 \ --cluster-yes
驗(yàn)證集群:
# 檢查集群狀態(tài) redis-cli -p 6379 cluster nodes | grep master # 測(cè)試數(shù)據(jù)分布 redis-cli -c -p 6379 set foo bar
生產(chǎn)環(huán)境建議
- 節(jié)點(diǎn)規(guī)劃:
- 至少3個(gè)物理機(jī)部署
- 每個(gè)物理機(jī)部署主從節(jié)點(diǎn)對(duì)
- 預(yù)留30%內(nèi)存用于故障轉(zhuǎn)移
- 監(jiān)控指標(biāo):
- 槽分布均衡性
- 節(jié)點(diǎn)間延遲
- 故障轉(zhuǎn)移次數(shù)
- 集群狀態(tài)變化
- 運(yùn)維操作:
- 使用
redis-cli --cluster reshard進(jìn)行槽遷移 - 定期執(zhí)行
CLUSTER REPLICATE調(diào)整拓?fù)?/li> - 備份時(shí)使用
CLUSTER SAVECONFIG
- 使用
五、Redis 同步機(jī)制的常見問題與優(yōu)化方案
5.1 問題1:全量復(fù)制頻繁觸發(fā)
現(xiàn)象表現(xiàn)
從節(jié)點(diǎn)頻繁斷開與重連,每次重連都觸發(fā)全量復(fù)制(RDB文件傳輸),導(dǎo)致主節(jié)點(diǎn)CPU和網(wǎng)絡(luò)帶寬占用過高,影響正常業(yè)務(wù)請(qǐng)求處理。監(jiān)控中可觀察到主節(jié)點(diǎn)CPU使用率周期性飆升,網(wǎng)絡(luò)出口流量激增。
原因分析
- 復(fù)制緩沖區(qū)過期:從節(jié)點(diǎn)斷線時(shí)間超過repl-backlog-ttl(默認(rèn)3600秒)后,復(fù)制積壓緩沖區(qū)被清空,無法支持增量復(fù)制
- 緩沖區(qū)容量不足:復(fù)制積壓緩沖區(qū)(repl-backlog-size)設(shè)置過小(默認(rèn)16MB),斷線期間的寫操作超出緩沖區(qū)容量
- 主節(jié)點(diǎn)標(biāo)識(shí)變更:主節(jié)點(diǎn)runid因重啟等原因變更,導(dǎo)致從節(jié)點(diǎn)保存的replid與主節(jié)點(diǎn)不一致
- 網(wǎng)絡(luò)環(huán)境不穩(wěn)定:網(wǎng)絡(luò)抖動(dòng)或帶寬不足導(dǎo)致連接頻繁中斷
優(yōu)化方案
- 調(diào)整緩沖區(qū)參數(shù):
- 將repl-backlog-size從16MB調(diào)整為64-128MB(根據(jù)業(yè)務(wù)寫入量計(jì)算:緩沖區(qū)大小=平均寫入速率×最大預(yù)期斷線時(shí)間)
- 將repl-backlog-ttl從3600秒延長(zhǎng)至86400秒(1天)
- 保障主節(jié)點(diǎn)穩(wěn)定性:
- 主節(jié)點(diǎn)配置appendonly yes,開啟AOF持久化
- 使用config set命令動(dòng)態(tài)調(diào)整參數(shù),避免重啟
- 部署主節(jié)點(diǎn)高可用方案(如哨兵)
- 網(wǎng)絡(luò)優(yōu)化:
- 主從節(jié)點(diǎn)部署在同一機(jī)房或可用區(qū)
- 使用專線連接跨機(jī)房節(jié)點(diǎn)
- 避免在網(wǎng)絡(luò)擁堵時(shí)段進(jìn)行部署或維護(hù)
- 監(jiān)控與告警:
- 監(jiān)控info replication中的connected_slaves和master_repl_offset
- 設(shè)置全量復(fù)制次數(shù)閾值告警
5.2 問題2:從節(jié)點(diǎn)同步延遲高
現(xiàn)象表現(xiàn)
從節(jié)點(diǎn)數(shù)據(jù)與主節(jié)點(diǎn)差距較大,通過info replication查看master_repl_offset與slave_repl_offset差值持續(xù)增大,從節(jié)點(diǎn)讀取到舊數(shù)據(jù)。在電商秒殺等高并發(fā)場(chǎng)景下,可能導(dǎo)致庫存超賣等問題。
原因分析
- 主節(jié)點(diǎn)寫入壓力大:QPS過高導(dǎo)致命令傳播不及時(shí)
- TCP緩沖延遲:repl-disable-tcp-nodelay設(shè)為no(默認(rèn))時(shí),TCP會(huì)緩沖數(shù)據(jù)導(dǎo)致延遲
- 從節(jié)點(diǎn)性能瓶頸:
- CPU資源不足,無法及時(shí)處理命令
- 內(nèi)存不足,頻繁觸發(fā)swap
- 磁盤IO性能差(RDB加載慢)
- 從節(jié)點(diǎn)數(shù)量過多:?jiǎn)蝹€(gè)主節(jié)點(diǎn)掛載過多從節(jié)點(diǎn)(>5個(gè))
優(yōu)化方案
- 網(wǎng)絡(luò)傳輸優(yōu)化:
- 從節(jié)點(diǎn)配置repl-disable-tcp-nodelay yes
- 調(diào)整TCP內(nèi)核參數(shù)(net.ipv4.tcp_slow_start_after_idle=0)
- 架構(gòu)優(yōu)化:
- 使用Redis Cluster分散寫入壓力
- 實(shí)現(xiàn)讀寫分離,將讀請(qǐng)求分散到多個(gè)從節(jié)點(diǎn)
- 限制單個(gè)主節(jié)點(diǎn)的從節(jié)點(diǎn)數(shù)量(建議≤5)
- 硬件升級(jí):
- 為從節(jié)點(diǎn)配置多核CPU(≥8核)
- 使用SSD替代HDD
- 增加內(nèi)存容量,避免swap
- 監(jiān)控措施:
- 實(shí)時(shí)監(jiān)控slave_repl_offset差值
- 設(shè)置延遲閾值告警(如>100MB)
5.3 問題3:主從數(shù)據(jù)不一致
現(xiàn)象表現(xiàn)
主節(jié)點(diǎn)執(zhí)行寫命令后,部分從節(jié)點(diǎn)未同步該命令,導(dǎo)致主從數(shù)據(jù)差異。通過redis-cli的diff命令可以檢測(cè)到不一致的鍵值,在金融交易等場(chǎng)景可能導(dǎo)致嚴(yán)重問題。
原因分析
- 異步復(fù)制特性:Redis默認(rèn)采用異步復(fù)制,主節(jié)點(diǎn)宕機(jī)可能導(dǎo)致數(shù)據(jù)丟失
- 從節(jié)點(diǎn)誤寫入:replica-read-only配置為no(默認(rèn)yes)時(shí),從節(jié)點(diǎn)可能被誤寫入
- 網(wǎng)絡(luò)分區(qū):部分從節(jié)點(diǎn)長(zhǎng)時(shí)間無法連接主節(jié)點(diǎn)
- 命令傳播失敗:主節(jié)點(diǎn)在命令傳播過程中崩潰
優(yōu)化方案
- 一致性配置:
min-replicas-to-write 2 min-replicas-max-lag 10
- 表示至少2個(gè)從節(jié)點(diǎn)延遲不超過10秒才允許寫入
- 從節(jié)點(diǎn)保護(hù):
- 強(qiáng)制所有從節(jié)點(diǎn)配置replica-read-only yes
- 定期檢查從節(jié)點(diǎn)配置
- 高可用部署:
- 部署Redis Sentinel自動(dòng)故障轉(zhuǎn)移
- 使用Redis Cluster分區(qū)容錯(cuò)
- 跨機(jī)房部署時(shí)考慮網(wǎng)絡(luò)分區(qū)場(chǎng)景
- 數(shù)據(jù)校驗(yàn)機(jī)制:
# 集群模式檢查 redis-cli --cluster check <host>:<port> # 主從數(shù)據(jù)對(duì)比 redis-cli -h master --scan | while read key; do diff=$(redis-cli -h master GET "$key" | diff - <(redis-cli -h slave GET "$key")) [ -n "$diff" ] && echo "$key: $diff" done
- 定期修復(fù):
- 設(shè)置定時(shí)任務(wù)校驗(yàn)數(shù)據(jù)一致性
- 發(fā)現(xiàn)不一致時(shí)觸發(fā)從節(jié)點(diǎn)resync
5.4 問題4:集群模式哈希槽遷移導(dǎo)致同步中斷
現(xiàn)象表現(xiàn)
在Redis Cluster擴(kuò)容/縮容時(shí),執(zhí)行CLUSTER SETSLOT MIGRATING/IMPORTING命令遷移哈希槽過程中,部分從節(jié)點(diǎn)同步中斷,客戶端請(qǐng)求返回MOVED/ASK重定向錯(cuò)誤。
原因分析
- 數(shù)據(jù)變更頻繁:遷移過程中大量鍵被修改,增量復(fù)制壓力大
- 網(wǎng)絡(luò)波動(dòng):遷移期間網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致連接中斷
- 資源競(jìng)爭(zhēng):遷移過程占用大量CPU和網(wǎng)絡(luò)資源
- 配置不一致:遷移后集群拓?fù)湫畔⑽醇皶r(shí)同步
優(yōu)化方案
- 遷移時(shí)機(jī)選擇:
- 選擇業(yè)務(wù)低峰期(如凌晨2-4點(diǎn))執(zhí)行遷移
- 監(jiān)控QPS和系統(tǒng)負(fù)載,在負(fù)載較低時(shí)操作
- 參數(shù)調(diào)優(yōu):
- 遷移前調(diào)大repl-backlog-size(如調(diào)整為256MB)
- 設(shè)置cluster-node-timeout(默認(rèn)15秒)為更合理的值
- 遷移過程控制:
# 分批遷移鍵空間 redis-cli --cluster rebalance \ --cluster-weight node1=1 node2=0 \ --cluster-use-empty-masters
- 監(jiān)控與恢復(fù):
- 使用cluster slots實(shí)時(shí)監(jiān)控遷移進(jìn)度
- 遷移完成后檢查所有節(jié)點(diǎn)cluster_state狀態(tài)
- 對(duì)同步中斷的從節(jié)點(diǎn)執(zhí)行cluster failover強(qiáng)制重新同步
- 客戶端處理:
- 客戶端實(shí)現(xiàn)ASK/MOVED重試邏輯
- 使用Redis集群代理屏蔽復(fù)雜度
六、Redis 同步機(jī)制的選型建議
1. 主從復(fù)制(Replication)
適用場(chǎng)景:
- 單機(jī)擴(kuò)展、讀寫分離
- 數(shù)據(jù)備份容災(zāi)
- 測(cè)試/開發(fā)環(huán)境
推薦方案: 主從復(fù)制 + 讀寫分離(1主多從)
優(yōu)勢(shì):
- 配置簡(jiǎn)單(通過replicaof命令即可完成)
- 性能開銷低(異步復(fù)制)
- 從節(jié)點(diǎn)可分擔(dān)讀請(qǐng)求(如QPS 10萬+的場(chǎng)景)
劣勢(shì):
- 主節(jié)點(diǎn)宕機(jī)需人工切換(需要運(yùn)維介入)
- 可用性較低(無自動(dòng)故障轉(zhuǎn)移)
- 數(shù)據(jù)延遲(異步復(fù)制導(dǎo)致)
典型應(yīng)用: 電商商品詳情頁緩存、新聞資訊類應(yīng)用
2. 哨兵模式(Sentinel)
適用場(chǎng)景:
- 高可用需求
- 自動(dòng)故障轉(zhuǎn)移
- 7x24小時(shí)服務(wù)
推薦方案: 至少3個(gè)哨兵節(jié)點(diǎn)+1主2從
優(yōu)勢(shì):
- 自動(dòng)監(jiān)控和故障轉(zhuǎn)移(30秒內(nèi)完成切換)
- 支持通知機(jī)制(可通過API對(duì)接監(jiān)控系統(tǒng))
- 配置中心(自動(dòng)更新客戶端連接信息)
劣勢(shì):
- 僅支持單主架構(gòu)(寫入瓶頸)
- 無法解決數(shù)據(jù)分片問題
- 腦裂問題需要特殊處理
配置示例:
sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 5000
3. 集群模式(Cluster)
適用場(chǎng)景:
- 大數(shù)據(jù)量(TB級(jí))
- 高并發(fā)寫入
- 需要水平擴(kuò)展
推薦方案: 至少3主3從(官方推薦)
優(yōu)勢(shì):
- 自動(dòng)數(shù)據(jù)分片(16384個(gè)slot)
- 支持水平擴(kuò)展(可動(dòng)態(tài)增刪節(jié)點(diǎn))
- 高可用(主從自動(dòng)切換)
劣勢(shì):
- 配置復(fù)雜(需要規(guī)劃槽位分配)
- 客戶端需要支持集群協(xié)議
- 跨slot操作受限(如事務(wù)、Lua腳本)
性能指標(biāo):
- 單節(jié)點(diǎn):8-10萬QPS
- 集群:線性擴(kuò)展(如10節(jié)點(diǎn)可達(dá)80-100萬QPS)
最終建議:
中小規(guī)模業(yè)務(wù)(數(shù)據(jù)量 <10GB,讀多寫少)
方案:主從復(fù)制 + 哨兵模式 實(shí)施要點(diǎn):
- 部署1主2從架構(gòu)
- 配置3個(gè)哨兵節(jié)點(diǎn)
- 設(shè)置合理的down-after-milliseconds(建議5000ms)
- 客戶端實(shí)現(xiàn)自動(dòng)重連機(jī)制
大規(guī)模業(yè)務(wù)(數(shù)據(jù)量 > 10GB,高并發(fā))
方案:集群模式 實(shí)施步驟:
- 使用redis-cli --cluster create初始化集群
- 確保每個(gè)主節(jié)點(diǎn)有1-2個(gè)從節(jié)點(diǎn)
- 配置cluster-require-full-coverage為no
- 監(jiān)控集群狀態(tài)(cluster nodes/cluster info)
對(duì)數(shù)據(jù)一致性要求極高的業(yè)務(wù)(如金融支付)
增強(qiáng)方案:
- 在集群模式基礎(chǔ)上:
- 設(shè)置min-replicas-to-write 2
- 配置min-replicas-max-lag 10
- 定期校驗(yàn):
- 使用redis-check-aof工具
- 實(shí)現(xiàn)CRC校驗(yàn)機(jī)制
- 建議搭配:
- 持久化采用AOF+fsync everysec
- 部署跨機(jī)房容災(zāi)方案
到此這篇關(guān)于Redis 同步機(jī)制解析的文章就介紹到這了,更多相關(guān)Redis 同步機(jī)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 解讀redis?slaveof命令執(zhí)行后為什么需要清庫重新同步
- 詳談redis跟數(shù)據(jù)庫的數(shù)據(jù)同步問題
- 使用Java代碼實(shí)現(xiàn)Redis和數(shù)據(jù)庫數(shù)據(jù)同步
- 一文詳解Redis的主從同步原理
- 淺談MySQL數(shù)據(jù)同步到 Redis 緩存的幾種方法
- 手把手教你用Redis 實(shí)現(xiàn)點(diǎn)贊功能并且與數(shù)據(jù)庫同步
- 基于Redis自動(dòng)過期的流處理暫停機(jī)制
- Redis中哨兵機(jī)制和集群的區(qū)別及說明
- Redis過期刪除機(jī)制與內(nèi)存淘汰策略的解析指南
相關(guān)文章
Redis之RedisTemplate配置方式(序列和反序列化)
這篇文章主要介紹了Redis之RedisTemplate配置方式(序列和反序列化),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
使用Redis實(shí)現(xiàn)秒殺功能的簡(jiǎn)單方法
這篇文章主要給大家介紹了關(guān)于使用Redis實(shí)現(xiàn)秒殺功能的簡(jiǎn)單方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
詳談redis跟數(shù)據(jù)庫的數(shù)據(jù)同步問題
文章討論了在Redis和數(shù)據(jù)庫數(shù)據(jù)一致性問題上的解決方案,主要比較了先更新Redis緩存再更新數(shù)據(jù)庫和先更新數(shù)據(jù)庫再更新Redis緩存兩種方案,文章指出,刪除Redis緩存后再更新數(shù)據(jù)庫的方案更優(yōu),因?yàn)樗梢员苊鈹?shù)據(jù)不一致的問題,但可能產(chǎn)生高并發(fā)問題2025-01-01
RedisDesktopManager遠(yuǎn)程連接redis的實(shí)現(xiàn)
本文主要介紹了RedisDesktopManager遠(yuǎn)程連接redis的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
redis5集群如何主動(dòng)手工切換主從節(jié)點(diǎn)命令
這篇文章主要介紹了redis5集群如何主動(dòng)手工切換主從節(jié)點(diǎn)命令,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01

