以下是 Redis 測試 的詳細步驟和方法,涵蓋功能驗證、性能測試、高可用性測試和安全測試,適用于開發(fā)、運維和測試人員全面評估 Redis 的穩(wěn)定性和性能。
一、測試目標
功能驗證:確保 Redis 的基本功能(如字符串、哈希、列表、集合、有序集合)正常工作。
性能測試:評估 Redis 在高并發(fā)、大規(guī)模數(shù)據(jù)場景下的吞吐量和延遲。
高可用性測試:驗證主從復(fù)制、哨兵模式、集群模式的故障轉(zhuǎn)移能力。
持久化測試:確保 RDB 和 AOF 持久化機制在重啟后數(shù)據(jù)不丟失。
安全測試:驗證密碼保護、訪問控制等安全策略的有效性。
二、測試環(huán)境準備
安裝 Redis
單節(jié)點測試:redis-server(默認端口 6379)。
集群測試:配置主從復(fù)制、哨兵模式或 Redis Cluster。
工具準備
Redis 命令行工具:redis-cli
性能測試工具:redis-benchmark
自動化測試工具:Python(redis-py)、JMeter
監(jiān)控工具:redis-cli info、redis-stat、Prometheus + Grafana
三、功能測試
1. 基本數(shù)據(jù)類型測試
步驟
字符串類型
哈希類型
列表類型
集合類型
有序集合類型
驗證方法
檢查返回值是否符合預(yù)期(如 OK、1 表示成功)。
使用 redis-cli type <key> 驗證數(shù)據(jù)類型。
2. 過期時間測試
步驟
驗證方法
等待過期時間后,GET 命令應(yīng)返回 nil。
3. 事務(wù)測試(MULTI/EXEC)
步驟
驗證方法
事務(wù)中的所有命令應(yīng)按順序執(zhí)行,結(jié)果一致。
四、性能測試
1. 使用 redis-benchmark 測試
步驟
單線程測試
多線程測試
參數(shù)說明
-n:請求總數(shù)。
-c:并發(fā)客戶端數(shù)。
-t:測試命令(如 set,get)。
-P:管道化請求數(shù)。
-k:是否啟用 Keepalive(1 表示啟用)。
驗證方法
觀察吞吐量(requests per second)和平均延遲(latency)。
比較不同并發(fā)數(shù)下的性能差異。
2. 使用 JMeter 測試
步驟
添加 TCP 請求,配置 Redis 的 IP 和端口。
使用 CSV 數(shù)據(jù)文件 提供測試數(shù)據(jù)(如 key1, key2)。
添加 監(jiān)聽器(如 View Results Tree、Aggregate Report)。
運行測試并分析結(jié)果。
五、高可用性測試
1. 主從復(fù)制測試
步驟
配置主從節(jié)點(redis.conf 中添加 slaveof <master-ip> 6379)。
在主節(jié)點寫入數(shù)據(jù):
在從節(jié)點讀取數(shù)據(jù):
驗證方法
從節(jié)點應(yīng)同步主節(jié)點的數(shù)據(jù)。
使用 INFO replication 檢查復(fù)制狀態(tài)。
2. 哨兵模式測試(故障轉(zhuǎn)移)
步驟
配置哨兵模式(sentinel.conf)。
模擬主節(jié)點故障(關(guān)閉主節(jié)點進程)。
檢查哨兵是否自動選舉新的主節(jié)點。
在客戶端連接哨兵地址,驗證讀寫是否正常。
驗證方法
使用 redis-cli -h sentinel -p 26379 info sentinel 查看故障轉(zhuǎn)移狀態(tài)。
3. 集群模式測試
步驟
使用 redis-cli --cluster create 創(chuàng)建集群。
向不同節(jié)點寫入數(shù)據(jù):
模擬節(jié)點故障(關(guān)閉某個節(jié)點),觀察數(shù)據(jù)是否自動遷移。
驗證方法
使用 CLUSTER NODES 檢查節(jié)點狀態(tài)和槽位分配。
六、持久化測試
1. RDB 持久化測試
步驟
配置 redis.conf:
寫入數(shù)據(jù)并等待觸發(fā) RDB 快照。
停止 Redis 服務(wù)并重啟,檢查數(shù)據(jù)是否恢復(fù)。
驗證方法
使用 redis-cli keys * 驗證數(shù)據(jù)是否保留。
2. AOF 持久化測試
步驟
配置 redis.conf:
寫入數(shù)據(jù)并檢查 AOF 文件大小。
停止 Redis 服務(wù)并重啟,檢查數(shù)據(jù)是否恢復(fù)。
驗證方法
使用 redis-check-aof 工具驗證 AOF 文件完整性。
七、安全測試
1. 密碼保護測試
步驟
配置 redis.conf:
使用 redis-cli 連接并嘗試未授權(quán)訪問:
使用密碼連接:
驗證方法
未授權(quán)訪問應(yīng)返回 -NOAUTH 錯誤。
2. 訪問控制測試(ACL)
步驟
配置 ACL 用戶(redis.conf 或 ACL SETUSER 命令)。
使用不同用戶權(quán)限測試讀寫操作。
檢查是否限制了特定命令或數(shù)據(jù)庫。
驗證方法
低權(quán)限用戶應(yīng)無法執(zhí)行高危命令(如 FLUSHALL)。
八、監(jiān)控與日志分析
實時監(jiān)控
日志分析
檢查 redis-server 日志文件(默認 redis.log)。
使用 grep 過濾錯誤或警告信息。
九、測試報告示例
測試類型 結(jié)果 備注
基本功能測試 通過 所有數(shù)據(jù)類型操作正常
性能測試(100并發(fā)) 吞吐量 100k/s 平均延遲 0.5ms
主從復(fù)制測試 通過 從節(jié)點同步主節(jié)點數(shù)據(jù)
AOF 持久化測試 通過 重啟后數(shù)據(jù)完整恢復(fù)
十、注意事項
生產(chǎn)環(huán)境測試:避免在生產(chǎn)環(huán)境中直接運行高負載測試,建議使用測試集群。
數(shù)據(jù)隔離:測試數(shù)據(jù)應(yīng)與生產(chǎn)數(shù)據(jù)隔離,使用獨立的 Redis 實例或數(shù)據(jù)庫。
工具選擇:根據(jù)測試目標選擇合適的工具(如 redis-benchmark 用于性能測試,redis-cli 用于功能驗證)。
通過以上步驟和方法,可以全面驗證 Redis 的功能、性能和高可用性,確保其在生產(chǎn)環(huán)境中的穩(wěn)定運行。
Redis有幾種基礎(chǔ)數(shù)據(jù)類型:
1,string
2,hash哈希
3,list列表
4,set集合
5,zset有序集合
二,Redis緩存測什么
Redis緩存測試主要測試功能和性能兩個方面
1,功能方面
1.1,測試點:
緩存中有緩存數(shù)據(jù),正確獲取緩存數(shù)據(jù)
在緩存中增加數(shù)據(jù),刪除數(shù)據(jù),redis中緩存數(shù)據(jù)正確
緩存中沒有緩存數(shù)據(jù),redis從DB正確獲取到緩存數(shù)據(jù),并儲存再redis中,然后返回正確的響應(yīng)到客戶端
緩存數(shù)據(jù)過期,redis重新獲取DB緩存數(shù)據(jù),并正確反映到客戶端
緩存數(shù)據(jù)的過期時間正常生效,過期時間內(nèi),獲取緩存數(shù)據(jù),沒有到DB的請求,過期后,redis沒有緩存數(shù)據(jù)了
如果是刪除緩存數(shù)據(jù)的設(shè)計,需要測試緩存數(shù)據(jù)響應(yīng)到客戶端以后,redit中緩存數(shù)據(jù)被刪除
緩存到達上限,如何處理
2,性能測試
2.1,測試點:
redis停止服務(wù),業(yè)務(wù)是否正常
redis緩存擊穿,大量訪問redis中不存在的值,會到DB去查詢
redis緩存雪崩,在同一時間大量的緩存過期,對DB造成巨大訪問壓力
緩存數(shù)據(jù)到達上限,業(yè)務(wù)表現(xiàn)是什么,超量淘汰機制
緩存數(shù)據(jù)出問題時,redis數(shù)據(jù)能否正確快速回復(fù)數(shù)據(jù)
redis服務(wù)斷開后回復(fù),業(yè)務(wù)流程是否正常回復(fù)到redis查詢
三,Redis怎么測
1,純基礎(chǔ)功能的測試,比如緩存讀寫的正確性,過期時間等,可以自己搭建本地的redis數(shù)據(jù)庫來測試,不影響其他環(huán)境
測試點:
鍵值對 CRUD:SET寫入后GET是否正確,DEL后是否刪除;
數(shù)據(jù)結(jié)構(gòu)操作:Hash 的HSET/HGET、List 的LPUSH/LRANGE、Set 的SADD/SMEMBERS等是否符合預(yù)期;
過期時間:設(shè)置EX/PX后,TTL是否正確,過期后是否無法讀??;
覆蓋行為:對已存在的鍵SET新值,是否覆蓋舊值,過期時間是否重置。
2,驗證業(yè)務(wù)系統(tǒng)和redis的集成效果(比如緩存更新邏輯,緩存穿透,緩存雪崩等),需要用專門的測試環(huán)境
通常是運維團隊搭建,與開發(fā)的業(yè)務(wù)系統(tǒng)配套,規(guī)模比較小。
測試時,問開發(fā)要連接信息:主機地址,端口,密碼,專用于測試的數(shù)據(jù)庫的編號
登錄redis: cmd命令:redis-cli -h 主機地址 -p 端口 -a 密碼 -n 數(shù)據(jù)庫編號
登錄后,使用redis命令來測試
3,UAT環(huán)境管理比較嚴,要注意數(shù)據(jù)清理,避免批量處理數(shù)據(jù),測試完要清理數(shù)據(jù),要和運維確認有數(shù)據(jù)備份
4,自動化測試的話,用python的redis-py庫來做
點擊查看代碼
沒有python環(huán)境的話,用shell腳本實現(xiàn)自動化測試redis
點擊查看代碼
5,redis可視化結(jié)果檢查:用redis desktop manager RDM工具來查看
6,redis的性能測試工具 redis-benchmark自帶工具,命令是:
(測試100個并發(fā)連接,共100000次請求的GET/SET性能)
redis-benchmark -h redis-test.example.com -p 6379 -a test123 -c 100 -n 100000 get set
輸出結(jié)果會包含QPS,平均響應(yīng)時間等
2、Redis功能測試角度
redis數(shù)據(jù)生效時,讀取是否正確
redis數(shù)據(jù)不存在,能否正常從db中讀取到正確的值,并正確寫入Redis和返回給上層
數(shù)據(jù)在redis和db中都不存在時的表現(xiàn)是否正常
刪除數(shù)據(jù)時,redis和db的數(shù)據(jù)是否一致
緩存增加/更新功能是否正確,查看緩存數(shù)據(jù)是否正確
增加相關(guān)日志,查看日志
后門接口工具
使用命令行,memcached和reids可以登錄后,直接查看
緩存刪除
緩存有效,驗證相關(guān)業(yè)務(wù)功能
緩存被刪除,驗證相關(guān)業(yè)務(wù)功能
緩存過期失效,memcached 和redis 可以設(shè)置失效時間,查看失效時間有沒有,對不對
超量淘汰機制:緩存達到上限怎么處理
緩存穿透
緩存雪崩
redis緩存服務(wù)停掉
緩存超時
緩存數(shù)據(jù)被誤修改后,快速恢復(fù)到指定版本
緩存數(shù)據(jù)被誤刪除后,快速恢復(fù)數(shù)據(jù)
性能測試關(guān)鍵指標
Redis 性能測試關(guān)注在不同負載下的表現(xiàn),主要考察以下指標:
吞吐量(Throughput, QPS):單位時間內(nèi)處理的請求數(shù)(一般指每秒查詢數(shù) QPS)。這是衡量 Redis 性能的核心指標之一,多數(shù)文檔和廠商給出的 Redis 性能規(guī)格都是以 QPS 表示。
響應(yīng)時間(Latency):每次操作的延遲,通常統(tǒng)計平均延遲(Avg)、百分位延遲(如 p50、p95、p99)等。面試時可提到關(guān)注中位延遲和尾延遲,以評估系統(tǒng)穩(wěn)定性。
并發(fā)能力:Redis 能夠同時支持的并發(fā)客戶端數(shù)或并發(fā)連接數(shù)。可以通過壓測工具設(shè)置并發(fā)數(shù) (-c 參數(shù)) 測試系統(tǒng)在高并發(fā)下的性能。
資源使用情況:監(jiān)控 CPU 使用率、內(nèi)存占用、網(wǎng)絡(luò)帶寬等。尤其在高負載時,需要關(guān)注 Redis 進程是否因資源瓶頸而限制性能。
負載穩(wěn)定性:在長時間或循環(huán)壓測下,觀察性能是否下降(如因為 AOF 重寫、內(nèi)存碎片化、GC 等導(dǎo)致的延遲波動)。
實際測試時,可模擬不同場景:冷啟動(空緩存)和熱啟動(緩存預(yù)熱)下的性能對比;使用不同大小的數(shù)據(jù);并發(fā)客戶端逐漸加壓等。