文章目錄
- 前言
- redis是什么?
- 定義
- 原理與特點
- 與MySQL對比
- Redis安裝
- 方式一、Homebrew 快速安裝 Redis(推薦)
- 方式二、源碼編譯安裝redis
- Homebrew vs 源碼安裝對比
- redis配置說明
- 修改redis配置的方法
- 常見redis配置項說明
- redis常用命令
- redis服務啟動命令
- redis客戶端連接訪問
- 鍵管理
- 數據庫操作
- 不同數據類型操作命令
- 數據備份與遷移
- 1. RDB快照備份
- 2. redis快照遷移
- redis客戶端可視化(待更新)
前言
redis介紹、安裝、常用命令、數據備份與遷移、常見用法。
redis是什么?
定義
Redis(Remote Dictionary Server)是一個開源的、基于內存的高性能鍵值存儲系統。支持字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等數據結構,廣泛應用于緩存、消息隊列、實時統計等場景。
原理與特點
內存存儲:數據主要存儲在內存中,讀寫速度極快(每秒可處理超10萬次操作)
數據結構多樣性:支持5種核心數據結構,滿足復雜業務需求
持久化雙機制:
- RDB快照:定期生成全量數據鏡像(二進制文件),適合災難恢復
- AOF日志:實時記錄寫操作命令,保證數據完整性
單線程架構:通過I/O多路復用實現高并發處理,避免線程競爭問題
與MySQL對比
特性 | Redis | MySQL |
---|---|---|
數據存儲 | 內存為主 | 磁盤存儲 |
數據結構 | 鍵值對+復雜結構 | 關系型表結構 |
讀寫性能 | 微秒級響應 | 毫秒級響應 |
適用場景 | 緩存/實時計算 | 持久化存儲/復雜查詢 |
Redis安裝
方式一、Homebrew 快速安裝 Redis(推薦)
macOS 用戶 Redis 快速安裝方法
環境要求
- macOS系統
- homebrew
1. 安裝 Homebrew(如未安裝)
打開終端執行:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2. 一鍵安裝 Redis
brew install redis# 快速驗證安裝
```bash
# 連接本地Redis(默認無密碼)
redis-cli ping # 應返回 PONG
# 查看版本信息
redis-cli --version
3. 關鍵路徑說明
類型 | 路徑 |
---|---|
配置文件 | /usr/local/etc/redis.conf |
數據存儲目錄 | /usr/local/var/db/redis/ |
日志文件 | /usr/local/var/log/redis.log |
方式二、源碼編譯安裝redis
環境要求
- Linux/macOS系統
- GCC編譯器(用于源碼編譯)
1. 安裝GCC編譯器
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install build-essential -y# CentOS/RHEL
sudo yum groupinstall "Development Tools" -y
2. Linux/macOS安裝
# 下載最新穩定版
wget https://download.redis.io/redis-stable.tar.gz
tar -xzvf redis-stable.tar.gz
cd redis-stable# 編譯安裝
make
sudo make install# 啟動Redis服務(前臺模式)
redis-server
3. 配置文件路徑
- 源碼目錄:
redis-stable/redis.conf
- 安裝后推薦路徑:
/usr/local/redis/etc/redis.conf
Homebrew vs 源碼安裝對比
特性 | Homebrew安裝 | 源碼編譯安裝 |
---|---|---|
安裝復雜度 | ?? 一鍵完成 | ?????? 需解決依賴 |
配置文件管理 | ???? 集中存放 | ?? 需手動管理 |
版本更新 | brew upgrade redis | 需重新下載編譯 |
自定義編譯選項 | ? 受限 | ? 完全自由 |
適合場景 | 開發/快速部署 | 生產定制化需求 |
redis配置說明
修改redis配置的方法
- 直接修改配置文件:需重啟服務生效(涉及網絡、持久化等核心配置)
直接編輯 Redis 的配置文件(通常名為 redis.conf),然后重啟 Redis 服務以使更改生效
# 修改配置文件
vim /path/to/redis.conf# 重啟服務生效(生產環境建議低峰期操作)
redis-cli -a password shutdown # 安全停止(保存數據)
redis-server /path/to/redis.conf
- 動態修改:通過
CONFIG SET
命令實時生效(部分參數)
# 動態修改
redis-cli -a yourpass
127.0.0.1:6379> CONFIG SET requirepass "NewPasswd" # 密碼
127.0.0.1:6379> CONFIG SET appendonly yes
127.0.0.1:6379> CONFIG SET timeout 300 # 設置客戶端超時300秒
127.0.0.1:6379> CONFIG REWRITE # 將動態修改持久化到配置文件
動態配置限制
Redis的某些配置參數(如bind、port、daemonize等)需要重啟服務才能生效,無法通過CONFIG SET命令直接修改。這是出于安全性和穩定性考慮。
常見redis配置項說明
# ---鏈接訪問管理
# 監聽端口(默認6379)
port 6380# 訪問密碼(默認無)
requirepass MySecurePassw0rd!# bind的作用:bind參數用于指定Redis監聽的網絡接口(如127.0.0.1表示僅本地訪問,空值或0.0.0.0表示監聽所有接口)。
# 綁定IP地址 (bind),指定Redis監聽的IP地址,即:允許指定 IP 地址連接
# 內網可以不配置bind,直接注釋掉就行
bind 127.0.0.1# 關閉保護模式(默認yes,開啟的話,只有本機才可以訪問redis)
# 當未設置bind且無密碼時,保護模式會拒絕遠程連接
protected-mode no# 最大客戶端連接數(默認10000)
maxclients 20000# 客戶端空閑超時(秒,0表示不限制)
timeout 300# --- RDB持久化管理
# RDB持久化快照觸發策略(格式:save <seconds> <keys-changed>)
# 1min內有至少有1000個鍵被改動則自動化生產rbd文件
# save 60 1000# 工作目錄(持久化文件存儲位置)
dir /data/redis# RDB持久化文件名(默認dump.rdb)
dbfilename custom_dump.rdb# PID文件路徑(默認/var/run/redis.pid)
pidfile /var/run/redis_6380.pid# ---內存管理配置
# 最大內存限制(示例:4GB)
maxmemory 4gb# 內存淘汰策略(默認noeviction)
# volatile-lru:從已設置過期時間的鍵中淘汰最近最少使用
# allkeys-lru:全體鍵中淘汰最近最少使用(推薦)
# volatile-ttl:淘汰剩余生存時間最短的鍵
maxmemory-policy allkeys-lru# ---日志管理配置
# 日志級別(debug/verbose/notice/warning)
loglevel notice# 日志文件路徑(默認不記錄文件)
logfile "/var/log/redis/redis-server.log"# 系統日志標識(默認redis)
syslog-ident redis6380# ---其他配置# 以守護進程運行(后臺模式,默認no)
daemonize yes# 后臺保存出錯時停止寫入(推薦yes)
# 作用:保證持久化數據一致性
stop-writes-on-bgsave-error yes# 開啟AOF模式(默認no)
# 作用:記錄所有寫操作命令,重啟時重放日志恢復數據
# 優點:數據完整性高;缺點:文件體積較大
appendonly yes# AOF文件名稱(默認appendonly.aof)
appendfilename "custom_appendonly.aof"# AOF同步策略
# always: 每次寫操作都同步(最安全,性能差)
# everysec: 每秒同步(推薦,平衡性能與安全)
# no: 由操作系統決定(最快,可能丟失數據)
appendfsync everysec# 開啟混合持久化(需先開啟AOF)
# 作用:AOF文件由RDB快照頭 + AOF增量命令組成
# 優點:結合RDB快速恢復和AOF數據完整性的優勢
aof-use-rdb-preamble yes# 命令重命名(安全加固)
# 示例:禁用FLUSHALL命令
rename-command FLUSHALL ""
redis常用命令
redis命令不區分大小寫
redis服務啟動命令
Linux/macos
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf # 前臺啟動
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf --daemonize yes # 后臺啟動
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 -a YourPassword shutdown # 安全停止(數據持久化)
sudo pkill -9 redis-server # 強制停止(可能丟失數據)
ps aux | grep redis-server # 查看進程是否存在
netstat -lntp | grep 6379 # 檢查端口監聽狀態
redis-cli -a YourPassword ping # 服務健康檢查(返回PONG正常)
mac Homebrew安裝方式
brew services start redis # 啟動服務(后臺運行)
brew services stop redis # 停止服務
brew services restart redis # 重啟服務(配置修改后使用)
brew services info redis # 查看運行狀態
Linux系統服務管理(Systemd)
sudo systemctl start redis # 啟動服務
sudo systemctl stop redis # 停止服務
sudo systemctl restart redis # 重啟服務
sudo systemctl status redis # 查看狀態
redis客戶端連接訪問
本地默認連接
# 連接本地Redis(默認端口6379,無密碼)
redis-cli
# 連接后驗證服務狀態
127.0.0.1:6379> PING # 正常響應 PONG
指定主機和端口
# 連接遠程Redis服務器
./redis-cli -h <host> -p <port> -a <password>
redis-cli -h 127.0.0.1 -p 6379 -a yourpassword # 連接命令行直接指定認證密碼
redis-cli -h 127.0.0.1 -p 6379 # 先連接后密碼認證
127.0.0.1:6379> AUTH yourpassword # 返回 OK 表示成功# 啟動redis服務后,可以使用 netstat 或類似工具來檢查 Redis 是否在預期的端口和接口上監聽
netstat -lntp | grep redis
# 查看redis配置信息
redis-cli -h localhost -p 6379 -a yourpassword CONFIG GET *
常見問題解決方案
1. 連接被拒絕
# 檢查服務是否運行
brew services list | grep redis
# 檢查防火墻設置
sudo lsof -i :63792. 忘記密碼
# 臨時關閉認證
vim /usr/local/etc/redis.conf → 注釋 requirepass
brew services restart redis
# 連接后重置密碼
redis-cli
127.0.0.1:6379> CONFIG SET requirepass "NewPassword"
鍵管理
KEYS * # 查看所有鍵(生產環境慎用)
keys *user* # 匹配包含user的所有key
EXISTS akey # 檢查鍵是否存在(返回1/0)
DEL akey # 刪除指定鍵
TTL akey # 查看鍵剩余生存時間(秒)
EXPIRE akey 60 # 設置60秒后過期
鍵空間掃描:漸進式遍歷所有鍵,避免KEYS *導致的服務器阻塞
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
核心參數:
cursor:游標值(0表示開始,遍歷結束返回0)
MATCH:鍵名匹配模式(支持*、?等通配符)
COUNT:單次返回的鍵數量(默認10,實際可能不準確)
TYPE:過濾鍵類型(Redis 6.0+支持,如string/hash/list)scan 0 MATCH *
SCAN 0 COUNT 10# 初始掃描(返回下一游標和部分鍵)
127.0.0.1:6379> SCAN 0 MATCH user:* COUNT 5
1) "17" # 下一游標
2) 1) "user:1001" # 匹配到的鍵列表2) "user:1002"# 繼續迭代(使用返回的游標)
127.0.0.1:6379> SCAN 17 MATCH user:* COUNT 5
1) "0" # 游標歸零表示遍歷完成
2) 1) "user:1003"
# 顯示數據庫鍵空間統計信息,
# 包括:每個數據庫的鍵總數,設置過期時間的鍵數量,平均TTL(生存時間)
info keyspace
127.0.0.1:6379> INFO KEYSPACE
# Keyspace
db0:keys=1532,expires=3,avg_ttl=259200000
db1:keys=47,expires=0,avg_ttl=0
數據庫操作
SELECT 1 # 切換到1號數據庫(默認0-15)
FLUSHDB # 清空當前數據庫
FLUSHALL # 清空所有數據庫(高危操作!)
監控預警
redis-cli -a yourpass INFO Memory # 查看內存使用
redis-cli -a yourpass INFO Stats # 查看操作統計
redis-cli -a yourpass --memkeys
# 輸出示例:
# Key Bytes Type
# user:1001 2048 hash
不同數據類型操作命令
字符串(String):
SET counter 100 # 設置鍵值
GET counter # 獲取值
INCR counter # 值+1,如100 → 101
DECR counter # 值-1 ,如101→ 100
APPEND counter "_end" # 追加字符串 → "100_end"
MSET k1 v1 k2 v2 # 批量設置鍵值# 原始格式輸出,獲取二進制安全數據(處理含特殊字符的鍵值)
redis-cli --raw GET "binary_key"
# 備份/恢復某個key的數據
redis-cli -h 127.0.0.1 -p 6379 -a yourpassword --raw GET "akey" > backup_akey.bin # 二進制時用.bin保存更好
cat backup_akey.bin | ./redis-cli -h 127.0.0.1 -p 6379 -a yourpassword -x SET "akey"
哈希表(Hash):
HSET user:1001 name "John" age 30 # 設置字段,key為user:1001
HGET user:1001 age # 獲取字段值 → "30"
HGETALL user:1001 # 獲取所有字段 → name/age
HINCRBY user:1001 age 1 # 年齡+1 → 31
列表(List):
LPUSH queue task1 # 左側插入 → [task1]
RPUSH queue task2 # 右側插入 → [task1, task2]
LRANGE queue 0 -1 # 獲取全部元素
LPOP queue # 彈出左側 → task1
集合(Set):
SADD tags redis db # 添加元素
SMEMBERS tags # 查看所有元素 → redis/db
SINTER tags active_tags # 求交集
SREM tags db # 刪除元素
有序集合(Sorted Set):
ZADD ranking 95 "PlayerA" 80 "PlayerB" # 添加帶分數成員
ZRANGE ranking 0 -1 WITHSCORES # 升序查看 → PlayerB(80)/PlayerA(95)
ZREVRANGE ranking 0 0 # 獲取第一名 → PlayerA
數據備份與遷移
1. RDB快照備份
非阻塞備份:
1.非阻塞式保存,Redis 在后臺生成 RDB 文件,不會影響當前服務。
# 連接到源Redis并觸發后臺保存
redis-cli -h 127.0.0.1 -p 6379 -a yourpassword BGSAVE
# 檢查保存是否完成(等待 'rdb_bgsave_in_progress' 變為 0 表示完成)
redis-cli -h 127.0.0.1 -p 6379 -a yourpassword INFO persistence
阻塞式備份:
2.阻塞式保存,立即生成 RDB 文件,但會暫停所有客戶端請求直到完成(謹慎使用!會導致服務暫停,短暫不可用)
redis-cli -h 127.0.0.1 -p 6379 -a yourpassword SAVE
查看備份文件:
定位備份之后生成的RDB文件路徑,一般文件名為 dump.rdb:
# 當你使用 Redis 的 BGSAVE 命令來觸發一個后臺快照保存時,Redis 會在后臺創建一個 RDB 文件。
# 這個 RDB 文件的存儲位置取決于 Redis 配置文件中的 dir 和 dbfilename 參數。
# dir: 這個配置指定了 Redis 數據庫文件存儲的目錄。dbfilename: 這個配置指定了數據庫文件的名稱。
# 例如,如果你的配置文件中設置了 dir 為 /var/lib/redis,并且 dbfilename 設置為 dump.rdb,那么 RDB 文件將會被存儲在 /var/lib/redis/dump.rdb。redis-cli -a yourpass CONFIG GET dir # 查看存儲目錄 → /var/redis/data
redis-cli -a yourpass CONFIG GET dbfilename # 文件名 → dump.rdb
2. redis快照遷移
將備份好dump.rdb文件遷移到目標Redis的數據目錄下,重啟目標redis服務,就會自動加載dump.rdb的數據
redis的數據目錄可以通過 CONFIG GET dir 查看
# 源服務器
scp /var/redis/data/dump.rdb user@newserver:/tmp/# 目標服務器
sudo systemctl stop redis
cp /tmp/dump.rdb /var/redis/data/
sudo systemctl start redis
redis客戶端可視化(待更新)
提示:所有生產環境操作前,請務必進行完整備份!遇到復雜問題時可查閱Redis官方文檔或使用
redis-cli --help
獲取幫助。
—end