Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Redis 安裝與配置完整教學:從原始碼編譯、持久化模式、記憶體優化到生產部署檢查清單

編輯:Linux 教學

Redis 是高效能鍵值資料結構伺服器,支援 String、Hash、List、Set、Sorted Set、Bitmap、HyperLogLog、GEO、Stream 等豐富型別,具備 RDB 快照與 AOF 重做日誌雙持久化機制。本文涵蓋:原始碼編譯安裝、核心配置參數解析 (持久化、記憶體、網路、安全、複寫、叢集)、系統核心參數調優、systemd 服務化、備份與災難恢復、生產部署檢查清單、常見效能陷阱。

一、原始碼編譯安裝 (取得最新穩定版)


# 1. 安裝編譯工具鏈
yum groupinstall -y "Development Tools"   # CentOS/RHEL
apt-get install -y build-essential        # Debian/Ubuntu

# 2. 下載最新穩定版 (以 7.2 為例)
cd /usr/local/src
wget https://download.redis.io/releases/redis-7.2.4.tar.gz
tar zxvf redis-7.2.4.tar.gz
cd redis-7.2.4

# 3. 編譯 (支援 TLS、模組)
make -j$(nproc) BUILD_TLS=yes
make install PREFIX=/usr/local/redis

# 4. 驗證
/usr/local/redis/bin/redis-server --version
# Redis server v=7.2.4 ...

二、核心配置檔 /usr/local/redis/etc/redis.conf 詳細解析

參數建議值說明
daemonizeyes守護進程模式 (systemd 管理時可設 no)
pidfile/var/run/redis/redis.pidPID 檔路徑
port6379監聽埠,生產環境建議修改非預設
bind127.0.0.1 或內網 IP嚴禁 0.0.0.0 直接暴露公網
timeout300客戶端閒置超時秒數 (0 關閉)
tcp-backlog511連線佇列長度,配合 somaxconn
loglevelnoticedebug/verbose/notice/warning
logfile/var/log/redis/redis.log日誌路徑
databases16資料庫數量 (叢集模式固定 1)
save 900 1900 秒內 1 次寫入觸發 RDBRDB 快照策略 (可多行疊加)
save 300 10300 秒內 10 次寫入
save 60 1000060 秒內 10000 次寫入
rdbcompressionyesRDB 壓縮 (LZF),CPU 換空間
dbfilenamedump.rdbRDB 檔名
dir/var/lib/redisRDB/AOF 儲存目錄 (須可寫)
appendonlyyes啟用 AOF 持久化 (生產強烈建議)
appendfilenameappendonly.aofAOF 檔名
appendfsynceverysecalways(最安全)/everysec(平衡)/no(最快)
no-appendfsync-on-rewriteyesAOF 重寫期間暫停 fsync 避免阻塞
auto-aof-rewrite-percentage100AOF 檔案增長 100% 觸發重寫
auto-aof-rewrite-min-size64mb最小觸發大小
maxmemory2gb記憶體上限 (視實體 RAM 留 20-30% 給系統)
maxmemory-policyallkeys-lru淘汰策略:volatile-lru/allkeys-lru/volatile-ttl 等
maxmemory-samples5LRU 採樣數,越大越精確但耗 CPU
requirepassStrongPassw0rd!認證密碼 (ACL 用戶體系 6.0+ 推薦用 user)
rename-commandFLUSHALL ""禁用/重命名危險指令 (FLUSHDB, KEYS, CONFIG 等)
slowlog-log-slower-than10000慢查詢閾值 10ms (微秒)
slowlog-max-len128慢查詢記錄保留條數

三、持久化模式深度選型指南

模式資料安全性效能影響恢復速度適用場景
RDB only可能丟失最後一次快照後的寫入低 (子進程 fork + 壓縮)快 (載入單一檔案)快取、可容忍秒級資料遺失
AOF only (everysec)最多丟失 1 秒寫入中 (每秒 fsync)慢 (重放指令)金融、訂單、不可遺失場景
RDB + AOF (混合)兼具:RDB 定時備份 + AOF 秒級保護中高中 (優先載入 RDB 再重放 AOF 尾部)生產環境標準配置
RDB + AOF (always)零資料遺失 (單機)高 (每寫入 fsync)慢極高一致性需求

建議:生產環境啟用 appendonly yes + appendfsync everysec + 保留 RDB 策略,並定期將 RDB/AOF 檔案異地備份 (S3、NFS、異地機房)。

四、系統核心參數調優 (sysctl)


# /etc/sysctl.d/99-redis.conf
vm.overcommit_memory = 1          # 允許記憶體超額分配 (fork 複製時必需)
net.core.somaxconn = 65535        # 監聽佇列長度 (配合 tcp-backlog)
net.ipv4.tcp_max_syn_backlog = 65535
net.core.netdev_max_backlog = 65535
fs.file-max = 1000000             # 系統級檔案描述符上限
vm.swappiness = 0                 # 盡量不使用 swap (Redis 對延遲敏感)

套用:sysctl --system,並加入 /etc/rc.local 或 systemd 服務 ExecStartPre 確保重開機生效。

五、systemd 服務單元 /etc/systemd/system/redis.service


[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
Type=notify
User=redis
Group=redis
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf --supervised systemd
ExecStop=/usr/local/redis/bin/redis-cli -p 6379 shutdown
TimeoutStopSec=30
LimitNOFILE=65535
LimitNPROC=65535
PrivateTmp=yes
PrivateDevices=yes
ProtectSystem=full
ReadWritePaths=/var/lib/redis /var/log/redis /var/run/redis

[Install]
WantedBy=multi-user.target

建立用戶目錄權限:


useradd -r -s /sbin/nologin redis
mkdir -p /var/lib/redis /var/log/redis /var/run/redis
chown -R redis:redis /var/lib/redis /var/log/redis /var/run/redis
chmod 750 /var/lib/redis /var/log/redis /var/run/redis

六、生產部署檢查清單 (上線前必驗)

  1. ✅ bind 僅綁定內網 IP,防火牆僅開放應用伺服器 IP 存取 6379
  2. ✅ requirepass 設定強密碼,或啟用 ACL user default on >password ~* +@all
  3. ✅ rename-command FLUSHALL "" 等禁用危險指令
  4. ✅ maxmemory 設定上限且 maxmemory-policy allkeys-lru
  5. ✅ vm.overcommit_memory=1 已套用
  6. ✅ somaxconn / tcp-backlog ≥ 511
  7. ✅ AOF 啟用 appendfsync everysec,RDB 策略合理
  8. ✅ 定時備份腳本 (每小時複製 RDB/AOF 至異地)
  9. ✅ 監控指標接入:used_memory、connected_clients、keyspace_hits/misses、rejected_connections、aof_last_rewrite_time
  10. ✅ 故障演練:手動觸發 BGREWRITEAOF、BGSAVE、模擬主機宕機恢復

七、常見效能陷阱與解決

現象原因解決
CPU 飆高、延遲尖峰大 Key 刪除 (DEL)、KEYS *、HGETALL 大 Hash用 UNLINK 非同步刪除、SCAN 替代 KEYS、分批讀取
記憶體持續增長不釋放maxmemory 未設、淘汰策略不當、AOF 重寫積壓設定 maxmemory、調整 policy、檢查 aof_rewrite_in_progress
fork() 耗時過長導致延遲記憶體過大、Transparent Huge Pages (THP) 開啟echo never > /sys/kernel/mm/transparent_hugepage/enabled 關閉 THP
主從複寫中斷網路抖動、repl-backlog-size 太小、輸出緩衝區溢出增大 repl-backlog-size 100mb、client-output-buffer-limit slave 256mb 64mb 60
Copyright © Windows教程網 All Rights Reserved