Redis 是高性能鍵值存儲系統,支持 String、List、Set、ZSet、Hash 等豐富數據結構,且操作原子性強、支持持久化(RDB/AOF)、主從復制、哨兵高可用、集群分片。本文涵蓋源碼編譯安裝、核心配置優化、數據結構選型、持久化策略、主從架構搭建等生產級部署全流程。
# 1. 安裝依賴
yum install -y gcc make tcl
# 2. 下載穩定版(官網 https://redis.io/download)
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. 編譯並安裝到指定目錄
make
make install PREFIX=/usr/local/redis
# 4. 複製配置文件
mkdir -p /usr/local/redis/etc
cp redis.conf /usr/local/redis/etc/
| 參數 | 推薦值 | 說明 |
|---|---|---|
| daemonize | yes | 後台守護進程模式運行 |
| bind | 127.0.0.1 192.168.1.100 | 綁定具體 IP,拒絕公網訪問,安全第一 |
| port | 6379 | 默認端口,建議修改非默認端口 |
| requirepass | StrongPassw0rd!@# | 強密碼認證,防止未授權訪問 |
| maxmemory | 2gb | 根據物理內存設定上限,防止 OOM |
| maxmemory-policy | allkeys-lru | 內存不足時淘汰策略,LRU 適合緩存場景 |
| save | 900 1 300 10 60 10000 | RDB 持久化觸發條件:時間窗口內達到寫入次數 |
| appendonly | yes | 開啟 AOF 持久化,數據安全性更高 |
| appendfsync | everysec | 每秒 fsync 一次,平衡性能與數據安全 |
| tcp-keepalive | 300 | 檢測死連接,釋放資源 |
| timeout | 0 | 0 表示不超時斷開長連接 |
| loglevel | notice | 生產環境日誌級別 |
| logfile | /var/log/redis/redis.log | 指定日誌文件路徑 |
| dir | /usr/local/redis/data | RDB/AOF 文件存放目錄,需獨立磁盤 |
# 啟動
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
# 客戶端測試
/usr/local/redis/bin/redis-cli -a StrongPassw0rd!@#
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set testkey "hello redis"
OK
127.0.0.1:6379> get testkey
"hello redis"
# 優雅關閉
/usr/local/redis/bin/redis-cli -a StrongPassw0rd!@# shutdown
# 配置 systemd 服務(/etc/systemd/system/redis.service)
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli -a StrongPassw0rd!@# shutdown
Restart=always
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
# 啟用開機自啟
systemctl daemon-reload
systemctl enable redis
systemctl start redis
| 類型 | 底層結構 | 典型場景 | 核心命令 |
|---|---|---|---|
| String | SDS (Simple Dynamic String) | 緩存、計數器、分佈式鎖、Session | SET/GET/INCR/DECR/SETEX |
| List | 雙向鏈表 / Quicklist | 消息隊列、最新列表、棧/隊列 | LPUSH/RPOP/LRANGE/LTRIM |
| Set | 哈希表 | 標籤系統、共同好友、抽獎去重 | SADD/SREM/SMEMBERS/SINTER/SUNION/SDIFF |
| ZSet | 跳躍表 + 哈希表 | 排行榜、延遲隊列、按權重排序 | ZADD/ZRANGE/ZSCORE/ZRANK/ZREVRANGE |
| Hash | 哈希表 | 對象存儲、購物車、用戶資料 | HSET/HGET/HGETALL/HINCRBY/HMSET |
everysec 策略每秒同步,最多丟失 1 秒數據。aof-use-rdb-preamble yes,重寫時將現有數據以 RDB 格式寫入 AOF 文件頭部,兼具快照速度與增量安全。主節點:無需特殊配置,默認即為主。
從節點配置(/usr/local/redis/etc/redis.conf):
replicaof 192.168.1.100 6379
masterauth StrongPassw0rd!@#
# 可選:從節點只讀
replica-read-only yes
驗證:INFO replication 查看 role:slave、master_link_status:up。
redis-cli --stat:實時統計 QPS、連接數、內存redis-cli --bigkeys:掃描大鍵,優化內存redis-benchmark -n 100000 -c 50 -P 10:基準測試,關注 GET/SET QPSredis-check-rdb / redis-check-aof:損壞文件修復echo never > /sys/kernel/mm/transparent_hugepage/enabled(加入 /etc/rc.local)sysctl -w net.core.somaxconn=65535vm.swappiness=1used_memory、connected_clients、rejected_connections、keyspace_misses、aof_last_bgrewrite_status遵循上述部署與優化規範,Redis 即可在高併發、大數據量場景下穩定運行,為業務提供亞毫秒級的極速讀寫能力。