Redis技術筆記-主從復制、哨兵與持久化實戰指南

目錄

前言

一、Redis主從復制

?(一)Redis主從復制介紹

?(二)基本環境準備

(三)工作原理

(四)結構模式

(五)一主一從(無密碼)

配置Master

配置Slave1

測試

(六)一主多從(無密碼)

添加Slave2

Master查看

(七)級聯復制(鏈式復制)

?將 Slave2 改為 Slave1 的 Slave

查看鏈式結構

(八)帶密碼的主從復制

配置 Master 密碼

配置Slave1認證

驗證密碼生效

?二、Redis哨兵

(一)Redis哨兵介紹

定位

核心作用

故障轉移流程

部署要點

與 Redis Cluster 的差異

(二)基本環境準備

(三)哨兵配置

Master 配置

Slave 配置

Sentinel 配置

測試

三、數據持久化

(一)RDB(Redis DataBase)快照

RDB介紹

工作原理

觸發機制

RDB的優缺點

RDB配置?

(二)AOF(追加文件)

結構與內容

刷盤策略

重寫機制

AOF的優缺點

AOF配置

(三)持久化方式對比

四、Redis 命令分類整理及常用配置項

(一)配置信息

(二) 基礎命令

(三) 數據操作命令

(四)集群命令

(五)?持久化命令

(六) 數據類型操作

(七)事務與鎖

(八)數據庫與遷移


前言

  • 上一篇介紹了Redis的三大緩存問題Redis集群的搭建,想要了解的可以參考Redis技術筆記-從三大緩存問題到高可用集群落地實戰。
  • 本篇介紹Redis的主從復制哨兵的配置及數據持久化RDBAOF)的實現,最后也提供了一個用來參考的Redis相關的命令和配置信息表

一、Redis主從復制

?(一)Redis主從復制介紹

  • Redis 主從復制是實現高可用性的重要機制。
  • 主節點負責處理客戶端的讀寫請求,執行數據的寫入操作并維護數據的最新狀態
  • 從節點通過異步復制機制定期從主節點拉取數據,保持數據的一致性,并能夠處理只讀請求,從而實現讀寫分離,提升系統的讀取性能。

?(二)基本環境準備

  • 主機準備
主機名IP地址角色密碼
Redis57192.168.88.57Mastertest
Redis58192.168.88.58Slave1-
Redis59192.168.88.59Slave2-
  • :如無密碼,則忽略所有 requirepass masterauth 配置即可,配置SELINUX和關閉防火墻。

(三)工作原理

  • 建立復制鏈路
    • 從節點啟動后,向主節點發送 PSYNC <replid> <offset>2.8+ 支持部分同步;舊版發送 SYNC)。
    • 主節點根據 replidoffset 判斷是否需要 全量同步增量同步
  • 全量同步流程
    • 主節點執行 fork() 創建子進程,觸發 RDB 快照。
    • 子進程生成 .rdb 文件;主節點同時維護 復制積壓緩沖區(repl-backlog),記錄后續寫命令。
    • RDB 文件通過 TCP 流 傳輸到從節點;傳輸期間主節點繼續處理寫請求,增量命令寫入緩沖區。
    • 從節點 熱加載 .rdb,完成基線數據恢復。
    • 主節點將緩沖區中的增量指令 順序發送 給從節點,從節點實時重放,實現最終一致。
  • 增量同步流程
    • 當從節點掉線后重連,且斷線時間 < 緩沖區窗口期(默認 1 MB),主節點僅推送缺失指令,無需再次全量傳輸,顯著減少網絡開銷。

(四)結構模式

  • 一主一從
    • 最簡架構,主節點負責寫,從節點負責讀;故障時手動切換
    • 適用于讀多寫少、數據量較小的場景。
  • 一主多從
    • 主節點掛接多個從節點,橫向擴容讀能力
    • 從節點可部署在不同機架或可用區,提升讀性能與容災能力。
    • 注意主節點網絡帶寬與 fork() 壓力。
  • 級聯復制(鏈式復制)
    • 主節點僅向第一層從節點同步,第一層從節點再向下一層同步,形成 的鏈式結構。
    • 優點:減輕主節點網絡與 CPU 負載;缺點:鏈路延遲逐級累加

(五)一主一從(無密碼)

配置Master

yum -y install redis #安裝Redis服務
vim /etc/redis.conf #修改配置文件
#69行 
bind   192.168.88.57 #指定Redis服務監聽的IP地址#92行 
port   6379 #指定Redis服務監聽的端口號systemctl start redis #啟動Redis服務#連接到Redis服務器查看當前Redis實例的主從復制狀態
redis-cli -h 192.168.88.57 -p 6379 info replication
#預期輸出
role:master
connected_slaves:0

配置Slave1

yum -y install redis #安裝Redis服務
vim /etc/redis.conf #修改配置文件
#69行 
bind   192.168.88.58 #指定Redis服務監聽的IP地址#92行 
port   6379 #指定 Redis 服務監聽的端口號systemctl start redis #啟動Redis服務redis-cli -h 192.168.88.58 -p 6379 #使用Redis客戶端連接到當前主機的Redis實例
> replicaof 192.168.88.57 6379 
#將當前Redis實例(192.168.88.58:6379)配置為從節點(Replica),并指向主節點(192.168.88.57:6379)> config rewrite #將當前Redis的運行時配置寫入配置文件/etc/redis.conf,實現持久化配置
> exit #退出Redis客戶端tail -1 /etc/redis.conf #檢查配置是否成功
#輸出
replicaof 192.168.88.58 6379

測試

  • Master寫入測試數據
#在Redis57執行
redis-cli -h 192.168.88.57 -p 6379
192.168.88.57:6379> mset k1 v1 k2 v2 k3 v3
192.168.88.57:6379> keys *
#預期輸出
1) "k1"
2) "k2"
3) "k3"
  • 立即在Slave1查看是否同步
#在Redis58執行
redis-cli -h 192.168.88.58 -p 6379
192.168.88.58:6379> keys *
#預期輸出
1) "k1"
2) "k2"
3) "k3"192.168.88.58:6379> get k1
#預期輸出
"v1"

(六)一主多從(無密碼)

添加Slave2

yum -y install redis #安裝Redis服務
vim /etc/redis.conf #修改配置文件
#69行 
bind   192.168.88.59 #指定Redis服務監聽的IP地址#92行 
port   6379 #指定 Redis 服務監聽的端口號systemctl start redis #啟動Redis服務redis-cli -h 192.168.88.59 -p 6379 #使用Redis客戶端連接到當前主機的Redis實例
> replicaof 192.168.88.59 6379 
#將當前Redis實例(192.168.88.59:6379)配置為從節點(Replica),并指向主節點(192.168.88.57:6379)> config rewrite #將當前Redis的運行時配置寫入配置文件/etc/redis.conf,實現持久化配置
> exit #退出Redis客戶端

Master查看

redis-cli -h 192.168.88.57 -p 6379 info replication#預期輸出
role:master
connected_slaves:2

(七)級聯復制(鏈式復制)

?將 Slave2 改為 Slave1 的 Slave

#Redis59主機執行
#使用Redis客戶端連接到IP地址為192.168.88.59、端口為6379的Redis實例
redis-cli -h 192.168.88.59 -p 6379#將當前Redis實例(192.168.88.59:6379)從之前的主節點中脫離,使其成為獨立的主節點
> replicaof no one#將當前Redis實例(192.168.88.59:6379)設置為從節點,并指向新的主節點192.168.88.58:6379
> replicaof 192.168.88.58 6379
> config rewrite
> exit

查看鏈式結構

#在Redis58主機執行
redis-cli -h 192.168.88.58 -p 6379 info replication#預期輸出
role:slave
master_host:192.168.88.57
connected_slaves:1

(八)帶密碼的主從復制

配置 Master 密碼

#Redis57執行
redis-cli -h 192.168.88.57 -p 6379
> config set requirepass test #動態設置Redis實例的密碼為test
> auth test #向 Redis 
#服務器發送密碼test進行身份驗證,驗證成功后,才可以執行其他Redis命令(如 PING、GET 等)> config rewrite 
> exittail -1 /etc/redis.conf
requirepass "test" # Redis 的配置項,用于設置密碼

配置Slave1認證

#Redis58執行
redis-cli -h 192.168.88.58 -p 6379
> config set masterauth test
#動態設置當前Redis實例的masterauth配置項為test
#masterauth是Redis從節點的配置項,用于指定連接主節點時的密碼(當主節點設置了requirepass時)> config rewrite
> exit

驗證密碼生效

#Redis57執行
redis-cli -h 192.168.88.57 -p 6379 -a test info replication
#預期輸出
connected_slaves:1#Redis58執行redis-cli -h 192.168.88.58 -p 6379
> auth test
> info replication
#預期輸出
role:slave
master_link_status:up

?二、Redis哨兵

(一)Redis哨兵介紹

定位

  • Sentinel 是 Redis 官方的高可用組件,一套獨立的二進制可執行文件,與 Redis 節點松耦合部署
  • 它通過持續監控主從拓撲、自動選主、實時通知客戶端,實現“故障發現故障切換 配置刷新”全流程閉環,全程無需人工干預。

核心作用

  • 故障檢測
    • 各哨兵持續向主、從節點發送 PING、INFO 與 PUBLISH 心跳;當 quorum 數量哨兵確認主節點不可達,即標記為客觀下線(ODOWN)
  • 自動故障轉移
    • 哨兵集群通過 Raft-like 選舉產生唯一領頭哨兵;隨后按復制偏移量最大原則選出新主,向其余從節點發送 SLAVEOF 指令,并將新拓撲寫入 sentinel.conf。
  • 配置推送
    • 故障轉移完成后,哨兵通過 +switch-master 廣播新主地址;客戶端調用 sentinel get-master-addr-by-name mymaster 即可實時獲取,主流 SDK(Jedis/Lettuce/Redisson)已原生支持,無需人工介入。

故障轉移流程

  • 持續探測:每個哨兵每秒向主節點及所有從節點發送 PING,并收集 INFO 與 PUBLISH 心跳
  • 主觀下線:若某節點在 down-after-milliseconds 內無響應,該哨兵將其標記為 sdown(主觀下線)。
  • 客觀下線:當 ≥ quorum 個哨兵報告同一節點為 sdown 時,集群將其標記為 odown(客觀下線),觸發故障轉移。
  • 選主與晉升:哨兵內部通過 Raft-like 投票選出唯一 Leader,Leader 在存活從節點中按復制偏移量、優先級、運行 ID 排序,選最優節點執行 SLAVEOF NO ONE 晉升為新主。
  • 拓撲更新Leader 向其余從節點發送 SLAVEOF new_host new_port 指令,完成數據追趕;同時向所有哨兵及客戶端廣播 +switch-master 事件,客戶端 SDK 實時刷新主節點地址,整個切換過程通常在 1–3 秒內完成。

部署要點

  • 奇數哨兵(3、5、7)跨機架部署,保證半數以上存活;
  • 與 Redis 節點物理隔離,防止“一機掛全掛”;
  • 在 Docker/NAT 環境開啟 sentinel announce-ipannounce-port,確保地址可識別;
  • 配置僅一行:sentinel monitor <master-name> <ip> <port> <quorum>

與 Redis Cluster 的差異

  • Sentinel 面向主從模式,單分片容量受單機內存限制,側重“單分片高可用
  • Cluster 面向數據分片,橫向擴展更佳,但無內置選主,需自行實現故障轉移

(二)基本環境準備

節點IP角色端口作用
Redis60192.168.88.60Master6379讀寫主節點
Redis61192.168.88.61Slave6379主備切換候選
Redis62192.168.88.62Sentinel26379監控 + 故障轉移

(三)哨兵配置

Master 配置

yum -y install redisvim /etc/redis.conf
bind 192.168.88.60
port 6379systemctl start redis
  • 驗證
redis-cli -h 192.168.88.60 -p 6379 info replication 
#預期輸出
role:master
connected_slaves:0

Slave 配置

yum -y install redisvim /etc/redis.conf
bind 192.168.88.61
port 6379
replicaof 192.168.88.60 6379systemctl start redis
  • 驗證
redis-cli -h 192.168.88.61 -p 6379 info replication#預期輸出
role:slave
master_host:192.168.88.60
master_link_status:up

Sentinel 配置

yum -y install redis 
#哨兵服務器不需要存儲數據所以不不需要啟動redis服務vim /etc/redis-sentinel.conf
#15行
bind 192.168.88.62 #指定 Sentinel 監聽的網絡接口地址#21行
port 26379 #設置 Sentinel 的監聽端口#26行
daemonize yes #以守護進程(后臺)模式運行 Sentinel#84行
sentinel monitor mymaster 192.168.88.61 6379 1
#配置 Sentinel 監控的主節點(Master)
mymaster 用戶自定義的主節點的邏輯名稱
192.168.88.67 6379 主節點的 IP 地址和端口
1 Quorum(法定票數)表示至少需要 1 個 Sentinel 實例認為主節點不可用時,才會觸發故障轉移systemctl start redis-sentinel
systemctl enable redis-sentinel 

測試

  • 查看節點信息
#查看哨兵已識別拓撲
redis-cli -h 192.168.88.62 -p 26379 sentinel master mymaster#查看從節點列表
redis-cli -h 192.168.88.62 -p 26379 sentinel slaves mymaster
  • 模擬主節點宕機
#Redis60執行
systemctl stop redis
  • 觀察故障轉移
#等待 5-10 秒后,再次查詢哨兵
redis-cli -h 192.168.88.69 -p 26379 sentinel master mymaster#預期輸出
ip=192.168.88.61
port=6379
flags=master
  • 驗證客戶端自動連接
#在任意客戶端如Redis61執行
redis-cli -h 192.168.88.62 -p 26379 sentinel get-master-addr-by-name mymaster
#預期輸出
1) "192.168.88.61"
2) "6379"
  • 恢復舊主節點
systemctl start redis
  • 再次查詢
#
redis-cli -h 192.168.88.62 -p 26379 sentinel slaves mymaster
#預期能看到舊主節點已變為 slave

三、數據持久化

  • 基本環境準備
主機名IP地址
Redis63192.168.88.63
  • 手動安裝并啟動redis服務

(一)RDB(Redis DataBase)快照

RDB介紹

  • RDB 是 Redis 提供的快照型持久化方案,以“時間點一致性”為目標,把某一時刻的全部內存數據序列化為緊湊的二進制 .rdb 文件,進程重啟時可一次性完整加載。
  • 文件構成鍵值對及對應的元數據(過期時間、數據類型、編碼方式),不包含任何增量日志
  • 設計定位:專為冷備份災難恢復以及主從復制初始同步而設計,不記錄會話級增量變化。
  • 關鍵特征
    • 體積小、加載速度快,適用于海量數據的快速回滾
    • 僅保留完整快照,對兩次快照之間的變更不做記錄,因此存在分鐘級數據丟失風險

工作原理

  • 主進程收到觸發條件后,調用 fork() 創建子進程;子進程獲得父進程內存的只讀快照,并按 .rdb 協議順序遍歷所有數據庫,將鍵值對及其元數據寫入臨時 .rdb 文件。
  • 父進程繼續處理客戶端請求,僅在 fork() 瞬間短暫阻塞;隨后所有對被修改內存頁的寫入通過寫時復制(Copy-On-Write)生成新副本,保證子進程所見數據與快照時刻完全一致。
  • 子進程完成寫盤后,原子地替換舊 .rdb 文件,父進程隨后清理 COW 產生的額外內存。

觸發機制

  • 手動BGSAVE 立即后臺快照;SAVE 會阻塞主線程,生產禁用。
  • 優雅退出:執行 SHUTDOWN systemctl stop redis 時自動調用 BGSAVE
  • 配置規則
    • 滿足 save <seconds> <changes> 條件時自動觸發
    • 在配置文件中設定 save <seconds> <changes>,如 save 90 5?表示 90?秒內發生≥5?次寫操作即觸發后臺快照。
  • 主從復制:從節點執行 SYNC/PSYNC 請求時,主節點自動觸發 BGSAVE 生成 RDB 并發送給從節點完成全量同步

RDB的優缺點

維度RDB 優點RDB 缺點
數據粒度完整快照,恢復時一次性加載兩次快照之間數據可能丟失
文件體積緊湊二進制,體積小不支持增量,每次全量
恢復速度加載極快,秒級回滾無法部分恢復
性能影響fork 子進程,主線程短暫阻塞大實例 fork 時內存翻倍
生產運維易于冷備份、跨機復制fork 失敗風險,需監控
場景適用冷備份、主從初始同步不適用于秒級零丟失需求

RDB配置?

  • 恢復步驟設定觸發規則寫入測試數據 備份快照清庫并停止實例覆蓋快照文件啟動實例驗證恢復
  • 查看默認配置
cat /etc/redis.conf
save 900 1       # 16分鐘內至少有1次變更
save 300 10      # 5分鐘內至少有10次變更
save 60 10000    # 1分鐘內至少有10000次變更
  • 修改配置文件:

vim /etc/redis.conf#修改默認配置
save 900 1      
save 90 5      # 90秒內至少有5次變更
save 60 10000    
  • 寫入測試數據(觸發 RDB):
redis-cli -h 192.168.88.63 -p 6379    
192.168.88.63:6379> mset k1 v1 k2 v2 k3 v3 k4 v4 k5 v5
  • 等待 90?秒或立即強制觸發
redis-cli -h 192.168.88.63 -p 6379 BGSAVE

  • 驗證快照已生成
ls -l /var/lib/redis/dump.rdb #顯示時間戳
  • 備份快照
cp /var/lib/redis/dump.rdb /tmp/dump.rdb 
  • 模擬災難(清空內存)
redis-cli -h 192.168.88.63 -p 6379 FLUSHALL
#FLUSHALL會刪除Redis實例中所有數據庫(默認16個數據庫)中的所有鍵值對redis-cli -h 192.168.88.63 -p 6379 keys * 
  • 恢復數據
systemctl stop redis
cp /tmp/dump.rdb /var/lib/redis/dump.rdb
chown redis:redis /var/lib/redis/dump.rdb
systemctl start redis
  • 最終驗證
redis-cli -h 192.168.88.63 -p 6379 keys *
#預期輸出5條鍵值對

(二)AOF(追加文件)

  • AOF 將每一次寫操作按順序追加到磁盤,形成可重放的指令流,保證秒級或毫秒級數據安全。

結構與內容

  • 文本格式:每條寫命令及其參數、時間戳、過期標志等完整記錄。
  • 無快照:全量歷史,不含二進制數據,可直接 cat 查看。

刷盤策略

策略命令數據安全性能建議場景
always每條寫立即 fsync(同步)零丟失最低金融級
everysec(默認)每秒 fsync≤1 秒丟失平衡通用業務
noOS(操作系統) 調度不可控最高日志類

重寫機制

  • 自動觸發
    • 觸發條件:文件大小 ≥ 64 MB 且增長率 ≥ 100 %
    • 流程
      • fork 子進程把內存快照寫成最簡指令追加增量 原子替換舊文件
  • 手動觸發BGREWRITEAOF(非阻塞)。
  • 壓縮文本:重寫后文件體積可縮小 50 %–90 %。

AOF的優缺點

維度AOF 優點AOF 缺點
數據安全支持秒級或毫秒級持久化(always/everysec)極端宕機時可能丟失 1 秒數據(everysec)
文件體積可讀文本,便于人工審計體積膨脹快,需定期重寫
恢復速度需逐條重放指令,恢復慢于 RDB大文件恢復耗時
性能影響everysec 對主線程影響小,always 影響大always 模式顯著降低寫吞吐
運維復雜度支持在線重寫、修復、截斷rewrite 時 CPU/IO 飆高
場景適用金融、訂單等零容忍業務對恢復速度要求極高的冷備份不適用

AOF配置

  • 恢復步驟啟用 AOF 寫入數據備份 appendonly.aof 清空內存 停止服務覆蓋文件 啟動實例驗證數據完整性
  • 啟用 AOF
redis-cli config set appendonly yes #開啟 Redis 的 AOF(Append Only File)持久化功能
redis-cli config rewrite 
#將當前通過 CONFIG SET 修改的配置持久化到 Redis 的配置文件中,確保重啟后配置仍然生效
  • 寫入測試數據
redis-cli -h 192.168.88.63 -p 6379 MSET a 1 b 2 c 3 #同時設置多個鍵值對
  • 備份
cp /var/lib/redis/appendonly.aof /tmp/appendonly.aof
  • 災難模擬
redis-cli FLUSHALL
  • 恢復
systemctl stop redis
cp /tmp/appendonly.aof /var/lib/redis/appendonly.aof
chown redis:redis /var/lib/redis/appendonly.aof
systemctl start redis
  • 驗證
redis-cli keys *
#預期顯示a b c三鍵
  • :在實際應用中,RDB 和 AOF 通常結合使用以平衡性能與數據安全性:
    • 金融業務等強一致性場景
      • 采用?AOF always每次寫操作同步到磁盤)配合?混合持久化aof-use-rdb-preamble yes),通過 RDB 快照實現較快速恢復,同時通過 AOF 日志確保最小數據丟失(最多丟失緩沖區未同步的數據)。
    • 通用業務場景
      • 采用?AOF everysec每秒同步一次)配合混合持久化,在性能(減少磁盤 I/O)與數據安全性(最多丟失 1 秒數據)之間取得平衡,并通過 RDB 快照加速恢復過程。

(三)持久化方式對比

對比維度RDB(快照)AOF(追加日志)混合持久化(RDB+AOF)
持久方式全量二進制快照順序追加寫命令快照頭 + 增量 AOF
數據粒度分鐘級秒級 / 毫秒級秒級
文件體積最小(壓縮后)最大(可重寫瘦身)中等(重寫后)
恢復速度最快(一次性加載)較慢(逐條重放)快(先加載 RDB 頭,再重放尾部 AOF)
數據安全可能丟失兩次快照間全部數據最多丟失 1 秒(everysec)或零丟失(always)與 AOF 同級,取決于刷盤策略
性能影響fork 瞬間阻塞everysec 影響極小,always 影響較大重寫階段 CPU/IO 峰值
觸發條件手動 BGSAVE / 優雅退出 / save 規則 / 主從同步每條寫命令 / 重寫閾值同 AOF,但重寫時先產生 RDB 頭
運維復雜度低(文件單一)高(需重寫、修復、截斷)中(需監控重寫)
生產適用場景冷備份、主從初始同步、容忍分鐘級丟失金融、訂單、零丟失需求兼顧恢復速度與數據安全

四、Redis 命令分類整理及常用配置項

(一)配置信息

配置項描述示例
bind <IP>設置監聽 IPbind 192.168.88.64
port <PORT>設置監聽端口port 6379
requirepass <PASSWORD>設置連接密碼requirepass mySecurePassword
daemonize yes以守護進程模式運行daemonize yes
logfile "/var/log/redis/redis.log"設置日志文件路徑logfile "/var/log/redis/redis.log"
dir /var/lib/redis設置 RDB 文件存儲目錄dir /var/lib/redis
dbfilename dump.rdb設置 RDB 文件名dbfilename dump.rdb
appendonly yes開啟 AOF 持久化appendonly yes
appendfilename "appendonly.aof"設置 AOF 文件名appendfilename "appendonly.aof"
save 900 1設置 RDB 快照規則(900 秒內至少有 1 次寫操作)save 900 1
save 300 10設置 RDB 快照規則(300 秒內至少有 10 次寫操作)save 300 10
save 60 10000設置 RDB 快照規則(60 秒內至少有 10000 次寫操作)save 60 10000
maxmemory <bytes>設置最大內存限制maxmemory 1gb
requirepass <PASSWORD>設置 Redis 服務的連接密碼requirepass mySecurePassword
maxmemory-policy allkeys-lru設置內存淘汰策略(LRU)maxmemory-policy allkeys-lru

(二) 基礎命令

命令描述示例
yum -y install redis安裝 Redisyum -y install redis
systemctl start redis啟動 Redis 服務systemctl start redis
systemctl enable redis設置 Redis 服務開機自啟systemctl enable redis
systemctl stop redis停止 Redis 服務systemctl stop redis
systemctl restart redis重啟 Redis 服務systemctl restart redis
systemctl status redis查看服務狀態systemctl status redis
vim /etc/redis.conf編輯 Redis 配置文件vim /etc/redis.conf
ls /var/lib/redis/查看持久化文件ls /var/lib/redis/
cp /var/lib/redis/dump.rdb <BACKUP_PATH>備份 RDB 文件cp /var/lib/redis/dump.rdb /tmp/backup.rdb
cp <BACKUP_PATH> /var/lib/redis/dump.rdb恢復 RDB 文件cp /tmp/backup.rdb /var/lib/redis/dump.rdb
chown -R redis:redis /var/lib/redis修改文件所有者chown -R redis:redis /var/lib/redis
ss -utnlp查看 Redis 服務監聽的端口ss -utnlp | grep redis

(三) 數據操作命令

命令描述示例
redis-cli -h <IP> -p <PORT> -a <PASSWORD>連接實例redis-cli -h 192.168.88.64 -p 6379 -a mySecurePassword
redis-cli -h <IP> -p <PORT>無密碼連接redis-cli -h 192.168.88.64 -p 6379
auth <PASSWORD>無密碼連接后輸入密碼auth mySecurePassword
keys <PATTERN>查找所有匹配給定模式的鍵keys user:*
keys ???匹配三個字符的鍵keys ???
keys a*匹配以 a 開頭的鍵keys a*
exists <KEY>檢查鍵是否存在exists user:1001
del <KEY1> <KEY2> ...刪除一個或多個鍵del user:1004 user:1003
type <KEY>查看鍵的數據類型type user:1001
ttl <KEY>查看鍵剩余生存時間(秒)ttl session:1234
expire <KEY> <SECONDS>設置鍵的生存時間(秒)expire session:1234 15
persist <KEY>移除過期時間persist session:1234
flushdb清空當前數據庫flushdb
flushall清空所有數據庫flushall

(四)集群命令

命令描述示例
cluster-enabled <YES/NO>是否 啟用集群cluster-enabled yes
cluster-config-file cluster-config-file <FILENAME>集群節點文件cluster-config-file nodes-6379.conf
redis-cli --cluster create <IP1>:<PORT1> ... --cluster-replicas <N>創建集群redis-cli --cluster create 192.168.88.51:6379 192.168.88.52:6379 192.168.88.53:6379 192.168.88.54:6379 192.168.88.55:6379 192.168.88.56:6379 --cluster-replicas 1
redis-cli --cluster info <IP>:<PORT>查看集群狀態redis-cli --cluster info 192.168.88.51:6379
cluster-node-timeout <MILLISECONDS>集群超時cluster-node-timeout 5000
redis-cli --cluster check <IP>:<PORT>校驗槽完整性redis-cli --cluster check 192.168.88.51:6379
redis-cli --cluster reshard <IP>:<PORT>槽遷移redis-cli --cluster reshard 192.168.88.51:6379

(五)?持久化命令

命令描述示例
config set <KEY> <VAL>運行時修改config set maxmemory 1gb
config set appendonly <YES/NO>是否啟用 AOFconfig set appendonly yes
config get <KEY>查看配置config get maxmemory
config rewrite保存運行時配置到文件config rewrite
BGSAVE手動觸發 RDB 快照(后臺)redis-cli BGSAVE
BGREWRITEAOF手動觸發 AOF 重寫redis-cli BGREWRITEAOF
LASTSAVE查看上次成功 RDB 時間戳redis-cli LASTSAVE
redis-check-rdb <FILE>校驗 RDB 完整性redis-check-rdb /var/lib/redis/dump.rdb
redis-check-aof <FILE>校驗 AOF 完整性redis-check-aof /var/lib/redis/appendonly.aof

(六) 數據類型操作

  • 數據類型表
數據類型對應名稱描述
String(單值)字符串類型存儲字符串值,支持多種操作,如設置、獲取、追加等。
Hash(對象)哈希類型存儲鍵值對集合,類似于編程語言中的字典或對象。
List(隊列)列表類型存儲有序的字符串列表,支持從頭部或尾部插入和刪除元素。
Set(去重)集合類型存儲無序的字符串集合,支持集合操作,如交集、并集、差集等。
Sorted Set(排序)有序集合類型存儲有序的字符串集合,每個元素關聯一個分數,支持按分數排序。
Bitmap(位圖)位圖類型存儲位數組,支持對單個位的操作,適用于高效存儲布爾值。
HyperLogLog(去重計數)超日志日志類型用于統計唯一元素數量,內存占用小,精度高。
Stream(消息流)流類型存儲消息流,支持發布/訂閱模式,適用于消息隊列和事件流處理。
  • 數據類型操作命令表
數據類型命令描述示例
String
set?<KEY><VALUE><SECONDS>設置鍵值對并設置過期時間(秒)set user:1008 "Hannah" ex 10
set?<KEY><VALUE><MILLISECONDS>設置鍵值對并設置過期時間(毫秒)set user:1009 "Ian" px 10000
set?<KEY><VALUE>只在鍵不存在時設置鍵值對set user:1010 "Jack" NX
set?<KEY><VALUE>只在鍵存在時設置鍵值對set user:1010 "Julia" XX
get?<KEY>獲取鍵的值get user:1008
mget?<KEY1><KEY2>獲取多個鍵的值mget user:1008 user:1009
mset?<KEY1><VALUE1><KEY2><VALUE2>同時設置多個鍵值對mset user:1011 "Alice" user:1012 "Bob"
incr?<KEY>將鍵的值加 1incr user:1012
incrby?<KEY><INCREMENT>將鍵的值增加指定的增量incrby user:1012 2
decr?<KEY>將鍵的值減 1decr user:1012
decrby?<KEY><DECREMENT>將鍵的值減少指定的減量decrby user:1012 3
append?<KEY><VALUE>將值追加到鍵的現有值append user:1013 " Hello"
strlen?<KEY>獲取鍵值的長度strlen user:1013
getrange?<KEY><START><END>獲取鍵值的子字符串getrange user:1013 0 5
setrange?<KEY><OFFSET><VALUE>從指定偏移量處替換鍵值setrange user:1013 0 "Hi"
getset?<KEY><VALUE>設置新值并獲取舊值getset user:1013 "NewValue"
List
lpush?<KEY><VALUE1><VALUE2>將值插入到列表頭部lpush users "Alice" "Bob"
rpush?<KEY><VALUE1><VALUE2>將值插入到列表尾部rpush users "Frank" "Grace"
lrange?<KEY><START><END>獲取列表的指定范圍lrange users 0 -1
llen?<KEY>獲取列表的長度llen users
lindex?<KEY><INDEX>獲取列表中指定索引的值lindex users 0
lset?<KEY><INDEX><VALUE>設置列表中指定索引的值lset users 0 "Alex"
lpop?<KEY>從列表頭部移除并返回值lpop users
rpop?<KEY>從列表尾部移除并返回值rpop users
linsert?<KEY><PIVOT><VALUE>在列表中指定位置插入值linsert users before "Charlie" "Brian"
lrem?<KEY><COUNT><VALUE>從列表中移除指定值lrem users 2 "Bob"
ltrim?<KEY><START><END>截取列表的指定范圍ltrim users 0 2
Hash
hset?<KEY><FIELD><VALUE>設置哈希表中的字段值hset user:1014 name "Hannah"
hmset?<KEY><FIELD1><VALUE1><FIELD2><VALUE2>同時設置多個字段值hmset user:1015 name "Ian" age 30 email "ian@example.com"
hget?<KEY><FIELD>獲取哈希表中指定字段的值hget user:1015 name
hmget?<KEY><FIELD1><FIELD2>獲取多個字段的值hmget user:1015 email phone
hgetall?<KEY>獲取哈希表中所有字段和值hgetall user:1015
hkeys?<KEY>獲取哈希表中所有字段名hkeys user:1015
hvals?<KEY>獲取哈希表中所有字段值hvals user:1015
hdel?<KEY><FIELD>刪除哈希表中的字段hdel user:1015 email
hlen?<KEY>獲取哈希表中字段的數量hlen user:1015
hexists?<KEY><FIELD>檢查字段是否存在hexists user:1015 age
Set
sadd?<KEY><MEMBER1><MEMBER2>將成員添加到集合sadd hobbies "reading" "traveling"
smembers?<KEY>獲取集合中的所有成員smembers hobbies
sismember?<KEY><MEMBER>檢查成員是否在集合中sismember hobbies "traveling"
scard?<KEY>獲取集合中的成員數量scard hobbies
srem?<KEY><MEMBER>從集合中移除成員srem hobbies "gaming"
sunion?<KEY1><KEY2>獲取多個集合的并集sunion hobbies myhobbies
sinter?<KEY1><KEY2>獲取多個集合的交集sinter hobbies myhobbies
sdiff?<KEY1><KEY2>獲取多個集合的差集sdiff hobbies myhobbies
srandmember?<KEY><COUNT>隨機獲取集合中的成員srandmember myhobbies 2
spop?<KEY>隨機移除并返回集合中的成員spop myhobbies
sdiffstore?<DESTKEY><KEY1><KEY2>將差集存儲到目標集合sdiffstore diffhobbies hobbies myhobbies
sunionstore?<DESTKEY><KEY1><KEY2>將并集存儲到目標集合sunionstore bothhobbies hobbies myhobbies
sinterstore?<DESTKEY><KEY1><KEY2>將交集存儲到目標集合sinterstore commonhobbies hobbies myhobbies
ZSet
zadd?<KEY><SCORE1><MEMBER1><SCORE2><MEMBER2>將成員添加到有序集合zadd scores 88 "Alice" 90 "Bob"
zrange?<KEY><START><END>獲取有序集合的指定范圍zrange scores 0 -1
zrange?<KEY><START><END>獲取有序集合的指定范圍及分數zrange scores 0 -1 withscores
zscore?<KEY><MEMBER>獲取成員的分數zscore scores "Alice"
zrangebyscore?<KEY><MIN><MAX>獲取有序集合中指定分數范圍的成員zrangebyscore scores 80 90
zincrby?<KEY><INCREMENT><MEMBER>增加成員的分數zincrby scores 3 "Charlie"
zcount?<KEY><MIN><MAX>獲取有序集合中指定分數范圍的成員數量zcount scores 80 90
zrem?<KEY><MEMBER>從有序集合中移除成員zrem scores "Charlie"
zrank?<KEY><MEMBER>獲取成員在有序集合中的排名(升序)zrank scores "Bob"
zrevrank?<KEY><MEMBER>獲取成員在有序集合中的排名(降序)zrevrank scores "David"
zcard?<KEY>獲取有序集合中的成員數量zcard scores
zremrangebyrank?<KEY><START><END>移除指定排名范圍內的成員zremrangebyrank scores 0 2
zremrangebyscore?<KEY><MIN><MAX>移除指定分數范圍內的成員zremrangebyscore scores 80 85
Bitmap
setbit?<KEY><OFFSET><VALUE>設置位圖中指定偏移量的值setbit bitmap:1 0 1
getbit?<KEY><OFFSET>獲取位圖中指定偏移量的值getbit bitmap:1 0
bitcount?<KEY>獲取位圖中值為 1 的位數bitcount bitmap:1
bitfield?<KEY><OP><OFFSET><VALUE>對位圖進行多種操作(如設置、獲取、自增等)bitfield bitmap:1 set u8 0 1
?bitpos?<KEY><BIT>查找位圖中第一個指定值的偏移量bitpos bitmap:1 1
HyperLogLog
pfadd?<KEY><ELEMENT1><ELEMENT2>添加元素到 HyperLogLogpfadd hll:1 "Alice" "Bob"
pfcount?<KEY>獲取 HyperLogLog 中的近似元素個數pfcount hll:1
pfmerge?<DESTKEY><SOURCEKEY1><SOURCEKEY2>合并多個 HyperLogLogpfmerge hll:3 hll:1 hll:2
Stream
xadd?<KEY><ID><FIELD1><VALUE1><FIELD2><VALUE2>添加消息到流xadd stream:1 * name "Alice" age 25
xread?<KEY><ID>讀取消息流xread count 2 block 0 streams stream:1 0-0
xlen?<KEY>獲取流中的消息數量xlen stream:1
xrange?<KEY><START><END>獲取流中的消息范圍xrange stream:1 - +
xdel?<KEY><ID>刪除流中的消息xdel stream:1 1626146017501-0
xtrim?<KEY><MAXLEN>修剪流,保留指定數量的消息xtrim stream:1 maxlen 100
xack?<KEY><GROUP><ID>確認消息已被消費xack stream:1 mygroup 1626146017501-0
xpending?<KEY><GROUP>查看待處理的消息xpending stream:1 mygroup
xgroup create?<KEY><GROUP><ID>創建消費者組xgroup create stream:1 mygroup $
xreadgroup?<GROUP><CONSUMER><KEY><ID>消費者組讀取消息xreadgroup GROUP mygroup CONSUMER alice COUNT 2 STREAMS stream:1 >

(七)事務與鎖

命令描述示例
multi開啟事務塊multi
exec提交事務exec
discard取消事務discard
watch <KEY>樂觀鎖watch balance
set <KEY> <VAL> NX PX <MSEC>分布式鎖set lock:order1 1 NX PX 30000

(八)數據庫與遷移

命令描述示例
select <DB>切換數據庫select 3
move <KEY> <DB>遷移鍵move user:1 3
exists <KEY>鍵存在檢查exists user:1

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89103.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89103.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89103.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

sundog公司的SilverLining SDK庫實現3d動態云層和下雨、下雨、雨夾雪效果

OSG系列文章目錄 文章目錄OSG系列文章目錄前言一、3d動態云與下雨、下雪效果不能同時出現二、3d動態云與下雨、下雪效果不能同時出現的原因三、解決辦法&#xff1a;前言 先看下效果&#xff1a;下雨 效果&#xff1a;下雪 效果&#xff1a;雨夾雪 &#x1f324;? Sundo…

Python:簡易的 TCP 服務端與客戶端示例

下面是一個完整的 TCP 服務端與客戶端示例&#xff0c;適用于 Python 3&#xff0c;使用 socket 模塊&#xff0c;并正確處理了中文傳輸與異常情況&#xff0c;支持基本的多輪通信。TCP 服務端&#xff08;server_tcp.py&#xff09;import socket HOST 127.0.0.1 # 監聽本地…

文心一言 4.5 開源深度剖析:中文霸主登場,開源引擎重塑大模型生態

> 百度用一場徹底的開源風暴,宣告中文大模型進入性能與普惠并重的新紀元——這里沒有技術黑箱,只有開發者手中躍動的創新火花。 2025年,當全球大模型競賽進入深水區,百度文心一言4.5的開源如同一顆重磅炸彈,徹底打破了“閉源即領先”的固有認知。這一次,中國團隊不…

解決“Windows 無法啟動服務”問題指南

錯誤1067&#xff1a;進程意外終止一、重啟計算機有時系統出現臨時性的服務故障&#xff0c;重啟計算機就可以有效解決問題。需要注意的是&#xff0c;在重啟之前&#xff0c;需要保存好所有未保存的工作&#xff0c;以免數據丟失。重啟完成后&#xff0c;再次嘗試啟動相關服務…

銀河麒麟(Kylin) - V10 GFB高級服務器操作系統ARM64部署昇騰910b訓練機以及Docker安裝

銀河麒麟(Kylin) - V10 GFB高級服務器操作系統ARM64部署昇騰910b訓練機以及Docker安裝 原因 項目需要使用Deepseek-r1-distill-qwen-32b來做訓練&#xff0c;在此記錄 測試環境 服務器配置 型號&#xff1a;G5680V2 CPU&#xff1a;CPU 4Kunpeng 920-5250 NPU&#xff1a;NP…

消息中間件(Kafka VS RocketMQ)

目錄 一、概要介紹 二、架構與原理 三、消費模式 1、Kafka—純拉模式 2、RocketMQ—拉模式 3、RocketMQ—推模式 4、模式對比 四、特殊消息 1、順序消息 2、消息過濾 3、延遲消息 4、事務消息 5、廣播消息 五、高吞吐 六、高可用 七、高可靠 一、概要介紹 Apa…

MyBatis級聯查詢深度解析:一對多關聯實戰指南

MyBatis級聯查詢深度解析&#xff1a;一對多關聯實戰指南在實際企業級開發中&#xff0c;單表操作僅占20%的場景&#xff0c;而80%的業務需求涉及多表關聯查詢。本文將以一對多關系為例&#xff0c;深入剖析MyBatis級聯查詢的實現原理與最佳實踐&#xff0c;助你掌握高效的數據…

搜索框的顯示與隱藏(展開與收起)

效果如下直接上代碼v-if"showAll || 0 < 3" 的意思是&#xff1a;如果 showAll 為 true&#xff0c;或者 0 小于 3&#xff0c;這個表單項就會顯示。<el-form :inline"true" class"demo-form-inline" size"default" label-width…

01 啟動流程實例

前言本文基于 Activiti 7.0.0.GA 源碼&#xff0c;研究 Activiti 如何啟動一個流程實例。審批流程圖如下圖&#xff0c;在此流程圖中&#xff0c;存在兩個UserTask節點&#xff0c;第一個節點是主管審批&#xff0c;第二個節點是產品經理審批&#xff0c;兩個節點中間有一個排他…

LeetCode--47.全排列 II

解題思路&#xff1a;1.獲取信息&#xff1a;給定一個可包含重復數字的序列&#xff0c;按任意順序返回所有不重復的全排列提示信息&#xff1a;1 < nums.length < 8-10 < nums[i] < 102.分析題目&#xff1a;相較于46題&#xff0c;它多限制了一個條件&#xff0c…

vue3 服務端渲染時請求接口沒有等到數據,但是客戶端渲染是請求接口又可以得到數據

原因是: 服務端請求 后端接收到 請求 ‘Content-Type’: ‘application/x-www-form-urlencoded; charsetUTF-8’ 直接返回錯誤的code 200000 增加 data: {} 服務端請求 后端接收到 請求 ‘Content-Type’: ‘application/json; charsetUTF-8’ 服務端請求就可以得到數據 expo…

Linux 文件操作命令大全:從入門到精通的實用指南

Linux 文件操作命令大全&#xff1a;從入門到精通的實用指南 在 Linux 系統中&#xff0c;文件操作是日常工作的核心內容之一。無論是開發者、運維工程師還是 Linux 愛好者&#xff0c;掌握常用的文件操作命令都能極大提升工作效率。本文將詳細介紹 Linux 系統中最常用的文件操…

Linux開發利器:探秘開源,構建高效——基礎開發工具指南(上)【包管理器/Vim】

???~~~~~~歡迎光臨知星小度博客空間~~~~~~??? ???零星地變得優秀~也能拼湊出星河~??? ???我們一起努力成為更好的自己~??? ???如果這一篇博客對你有幫助~別忘了點贊分享哦~??? ???如果有什么問題可以評論區留言或者私信我哦~??? ??????個人…

基于遷移學習的培養基配方開發方法

本文為學習筆記&#xff0c;原文專利&#xff1a; 中國專利公布公告 然后輸入 202110622279.7 概覽 一、問題背景 傳統培養基開發痛點&#xff1a; 數據依賴&#xff1a;需大量細胞實驗&#xff08;1000配方&#xff09;訓練專用模型 遷移性差&#xff1a;A細胞模型無法直接…

Web3.0與元宇宙:重構數字文明的技術范式與社會變革

一、技術融合&#xff1a;Web3.0與元宇宙的底層架構互補1.1 區塊鏈與智能合約&#xff1a;構建信任基石去中心化信任機制&#xff1a;Web3.0的區塊鏈技術為元宇宙提供去中心化信任框架&#xff0c;虛擬資產&#xff08;如土地、道具&#xff09;通過NFT&#xff08;非同質化代幣…

Java: OracleHelper

/*** encoding: utf-8* 版權所有 2025 ©涂聚文有限公司 * 許可信息查看&#xff1a;言語成了邀功盡責的功臣&#xff0c;還需要行爲每日來值班嗎* 描述&#xff1a; https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html ojdbc11* Author : geovi…

OSPFv3-一二類LSA

文章目錄OSPFv3 LSA類型Router LSANetwork LSA&#x1f3e1;作者主頁&#xff1a;點擊&#xff01; &#x1f916;Datacom專欄&#xff1a;點擊&#xff01; ??創作時間&#xff1a;2025年07月12日20點01分 OSPFv3 LSA類型 Router LSA 不再包含地址信息&#xff0c;使能 OS…

HugeGraph 【圖數據庫】JAVA調用SDK

1.引入依賴<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>28.0-jre</version> </dependency><dependency><groupId>com.squareup.okhttp3</groupId><artifac…

軟考中級【網絡工程師】第6版教材 第2章 數據通信基礎(中)

考點分析&#xff1a;重要程度&#xff1a;???&#xff0c;本章可能是全書最難的章節&#xff0c;偏理論&#xff0c;公式多除了傳輸介質&#xff0c;其他知識點只考選擇題&#xff0c;考試一般占3 ~ 5分高頻考點&#xff1a;PCM、奈奎斯特定理、曼徹斯特編碼&#xff1b;難…

單片機(STM32-中斷)

一、中斷基礎知識 1.概念 中斷&#xff08;Interrupt&#xff09;是一種特殊的事件處理機制。當CPU正在執行主程序時&#xff0c;如果出現了某些緊急或重要的事件&#xff08;如外設請求、定時器溢出等&#xff09;&#xff0c;可以暫時中止當前的程序&#xff0c;轉而去處理…